132-异常
罗列捕获异常的语法结构,知晓异常捕获的使用场景
什么是异常:当检测到一个错误(不是语法错误)时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的"异常"。
异常≠错误
异常往往是由于输入信息异常或者未知的结果导致程序无法执行!
除数为0异常:
读取文件异常:FileNotFoundError
No such file or directory
异常捕获方法
完整方法
try:
可能出现异常的代码
except Exception as e: # 不需要获取异常信息的话"Exception as e"可以不写
如果try语句中的代码出现了异常,则立即执行后续代码
print(e) # 实际工作中可以写入到日志中
else:
当try语句中的代码没有出现异常,则执行else语句中的代码,反之,则不执行
finally:
特别适合实现一些收尾的工作,因为它是**无论是否异常都会执行**的代码
捕获异常获取错误信息
把异常信息写入日志文件(某天某日某时出现某错误)
try:
A 方案 可能出现异常的代码
except Exception as e:
B 方案 如果try语句中的代码出现了异常,则立即执行后续代码
print(e) # 实际工作中可以写入到日志中
!!例子
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except ZeroDivisionError:
return "除数不能为零"
except TypeError:
return "类型错误"
except ValueError:
return "值错误"
except (IndexError, KeyError):
return "索引或键不存在"
except Exception as e:
return f"未知错误: {type(e).__name__} - {str(e)}"
return wrapper
常用错误
exceptions_dict = {
"ZeroDivisionError": "除零错误 - 当除数为零时",
"TypeError": "类型错误 - 当操作或函数应用于不适当类型的对象时",
"ValueError": "值错误 - 当操作或函数接收到类型正确但值不适当的参数时",
"IndexError": "索引错误 - 当序列下标超出范围时",
"KeyError": "键错误 - 当字典中找不到指定的键时",
"FileNotFoundError": "文件未找到错误 - 当试图打开不存在的文件时",
"IOError": "输入/输出错误 - 当输入/输出操作失败时",
"NameError": "名称错误 - 当使用一个未定义的变量时",
"AttributeError": "属性错误 - 当对象没有指定的属性或方法时",
"SyntaxError": "语法错误 - 当代码不符合Python语法规则时",
"ImportError": "导入错误:循环导入会导致"
}