1. 异常处理
try:
int(input('请输入数字:'))
except ValueError:
print('数据类型有误')
2. 多分支的异常处理
try:
name
int(input('请输入数字:'))
except NameError:
print('name 没有定义')
except ValueError:
print('数据类型有误')
3. Exception 万能异常 -> 什么异常类型都可以匹配到
- 如果使用了多分支且又用了万能异常,将万能异常放在分支的最后面
try:
[][1]
except NameError:
print('name 没有定义')
except ValueError:
print('数据类型有误')
except Exception:
print('万能异常')
- Exception as xxx -> xxx 返回是什么类型的异常
try:
[][1]
except NameError:
print('name 没有定义')
except ValueError:
print('数据类型有误')
except Exception as sort:
print(sort) # list index out of range
print('万能异常')
- 当主动抛出 Exception 异常并且传递参数的时候,在捕获 Exception 异常的时候可以获取到传递的参数
try:
raise Exception('异常信息')
except Exception as e:
print(e) # 异常信息
4.else
- 没有异常的时候执行 else 中的代码
try:
int(input('请输入数字:'))
except NameError:
print('name 没有定义')
except ValueError:
print('数据类型有误')
except Exception as sort:
print(sort) # list index out of range
print('万能异常')
else:
print('没有发生异常')
5.finally
- 不管代码是否异常都会执行
try:
int(input('请输入数字:'))
except NameError:
print('name 没有定义')
except ValueError:
print('数据类型有误')
except Exception as sort:
print(sort) # list index out of range
print('万能异常')
else:
print('没有发生异常')
finally:
print('不管代码是否异常都会执行')
- finally 一般是用于函数里做异常处理用的,不管是否异常去做一些收尾工作
def open_file():
try:
f = open('file', 'w', encoding='utf-8')
except Exception:
print('发生异常了')
finally:
print('不管代码是否异常都会执行')
f.close() # 无论是否发生了异常都要关闭文件,此时无需在在异常中和try中写
open_file()
- 当函数中有 return 的时候 finally 中的代码依然会被执行
def open_file():
try:
f = open('file', 'w', encoding='utf-8')
return True
except Exception:
print('发生异常了')
return False
finally:
print('不管代码是否异常都会执行')
f.close()
print(open_file())
6.自定义异常类
- 使用场景: 根据不同的错误返回不同的状态,一般在编写接口的时候用的比较多
class MyException(Exception): # 通过继承 Exception 类实现自定义异常类
def __init__(self, code, msg):
self.code = code,
self.msg = msg
try:
raise MyException(1000, '自定义错误') # 主动抛出自定义异常
except MyException as me: # 捕获自定义的异常
print(me.code) # 1000
print(me.msg) # 自定义错误
except Exception as e: # 捕获所有异常
print(e)
← 开发规范 循环删除列表或字典中的值 →