涨口碑说做的网站,餐饮logo设计,做微网站的第三方,张家口认证助手app在Python编程中#xff0c;异常是程序运行时发生的错误#xff0c;它会中断程序的正常执行流程。异常处理机制使得程序能够捕获这些错误#xff0c;并进行适当的处理#xff0c;从而避免程序崩溃。 1 错误类型
代码的错误一般会有语法错误和异常错误两种#xff0c;语法错…在Python编程中异常是程序运行时发生的错误它会中断程序的正常执行流程。异常处理机制使得程序能够捕获这些错误并进行适当的处理从而避免程序崩溃。 1 错误类型
代码的错误一般会有语法错误和异常错误两种语法错误就是代码没有按照 Python 规定语法去写导致程序无法执行比如代码的格式、缩进等。另外一种是异常错误即使语法正确程序在运行过程中也可能会出错比如用户输入了错误的内容列表的索引不存在字典的key不存在等等。
使用异常处理可以在异常错误的时候执行特定的逻辑让程序可以继续执行如果不对异常捕获程序将终止执行。
异常的分类
1内置异常类
zeroDivisionError除或取模零IndexError序列中没有此索引(index)KeyError映射中没有这个键SyntaxErrorPython 语法错误OSError操作系统异常如文件打开异常keyboardInterrupt键盘中断错误Ctrlc使得程序异常退出RuntimeError运行时错误Exception所有异常的父类
2自定义异常类
可以通过自定义类继承 Exception 实现。 2 捕获异常
2.1 捕获常规异常
try:可能发生错误的代码
except:如果出现异常执行的代码示例如下
需求尝试以r模式打开文件如果文件不存在则以w方式打开。
try:f open(linux.txt, r)
except:f open(linux.txt, w)2.2 捕获指定异常
try:print(name)
except NameError as e:print(name变量名称未定义错误)注意事项
如果尝试执行的代码的异常类型和要捕获的异常类型不一致则无法捕获异常。一般try下方只放一行尝试执行的代码。 2.3 捕获多个异常
当捕获多个异常时可以把要捕获的异常类型的名字放到except 后并使用元组的方式进行书写。
try:print(1/0)
except (NameError, ZeroDivisionError) as e:print(e)结果如下 也可以使用带有分支的异常处理如下
try:# 可能会引发异常的代码print(1/0)
except ValueError as ve:# 处理ValueError的代码print(fValueError occurred: {ve})
except ZeroDivisionError as ze:# 处理ValueError的代码print(fZeroDivisionError occurred: {ze})
except TypeError as te:# 处理TypeError的代码print(fTypeError occurred: {te})
except Exception as e:# 处理其他所有类型的异常print(fAn error occurred: {e}) 结果如下 2.4 捕获所有异常
try:print(name)
except Exception as e:print(e)
结果如下 2.5 捕获else分支
还可以使用 else 和 finally 子句。
else当try块中的代码没有引发异常时执行else块的代码。finally无论是否发生异常finally块的代码总会执行。
try:f open(test.txt, r)
except Exception as e:f open(test.txt, w)
else:print(没有异常真开心)
finally:f.close()3 抛出异常
在Python中可以使用 raise 关键字手动抛出异常。
def divide(x, y):if y 0:raise ValueError(y cannot be zero)return x / ydivide(4, 2)
divide(3, 0)
结果如下 可以在函数或代码块中根据需要抛出特定类型的异常以便在其他地方进行捕获和处理。 4 自定义异常
有时标准异常不足以描述特定的错误情况可以通过创建自定义异常类来定义新的异常类型
class CustomError(Exception):自定义异常类def __init__(self, message):self.message messagedef __str__(self):return fCustomError: {self.message}# 使用自定义异常
try:raise CustomError(This is a custom error)
except CustomError as ce:print(ce)
结果如下 5 异常传递
当一个异常在函数中未被处理时该异常会向上传递到调用该函数的地方直到被捕获或到达程序的顶层从而导致程序崩溃。
read_file函数试图打开一个文件如果文件不存在会捕获FileNotFoundError并抛出一个自定义的CustomError。process_file函数调用read_file并尝试处理文件内容如果发生CustomError会捕获并重新抛出。最外层的try...except语句最终捕获并处理CustomError输出错误信息。
class CustomError(Exception):自定义异常类def __init__(self, message):self.message messagedef __str__(self):return fCustomError: {self.message}def read_file(file_path):try:with open(file_path, r) as file:return file.read()except FileNotFoundError as e:raise CustomError(fFile not found: {file_path}) from edef process_file(file_path):try:content read_file(file_path)# 假设这里有其他处理文件内容的代码return contentexcept CustomError as ce:print(ce)raisetry:file_content process_file(non_existent_file.txt)
except CustomError as ce:print(fHandled at top level: {ce})
结果如下