python异常处理
- 异常捕获
- 使用except捕获异常时,不但捕获指定类型的错误,还会捕获到其子类异常
- 可以跨越多层调用,即捕获到方法下调用的方法的异常
- 调用栈
- 错误堆栈: 记录错误,并通过logging模块配置可被打印到日志文件中
- 如果错误没有被捕获,它就会一直往上抛,最后被Python解释器捕获,打印一个错误信息,然后程序退出
捕获已知异常
s1 = input("请输入一个字符:")
try:
int(s1)
except IndexError as e:
print(e)
except KeyError as e:
print(e)
except ValueError as e:
print(e)
捕获未知异常
s1 = input("请输入一个字符:")
try:
int(s1)
except Exception as e:
print(e)
异常处理完整结构
try:
pass # 主代码块
except KeyError as e:
pass # 出现该异常时执行
else:
pass # 主代码块执行完,执行该块(若捕获到异常,则不执行该句)
finally:
pass # 无论异常与否,最终执行该块(不论try、except、else是否出现异常,该句都会执行)
抛出异常
s1 = input("请输入一个字符:")
try:
if len(s1) != 1:
raise Exception(KeyError) # 抛出KeyError异常
except Exception as e: # 捕获异常
print(e)
自定义异常
class MyException(Exception):
def __init__(self, code, msg):
self.error_code = code
self.error_msg = msg
def __str__(self):
return self.error_code, self.error_msg
try:
raise MyException(3000, '自定义异常')
except MyException as e:
print(e.error_code, e.error_msg)