一、异常对象
Python
标准库中 有很多异常类,都是继承自 标准库里面的 Exception 类
1 2 3 4 5 6 7
| a = 100/0 print(a)
Traceback (most recent call last): File "xxxxxxxxxx.py", line 1, in <module> a = 100/0 ZeroDivisionError: division by zero
|
二、 捕获异常
try … except …
try ... except ...
方法可以用来 捕获 和 处理异常
1 2 3 4 5 6 7
| while True: try: miles = input('请输入英里数:') km = int(miles) * 1.609344 print(f'等于{km}公里') except ValueError: print('你输入了非数字字符')
|
try
:缩进的3行代码可以看做 保护区 中的代码。except
:如果 保护区 中的代码发生异常,程序不会中止,会继续执行。except
后面缩进的代码 就是对 这种类型错误的 一种处理。
如果某段代码中可能出现好几种异常,可以使用多个 except
代码段,分别捕获多种类型的异常。
1 2 3 4 5 6 7 8 9 10
| try: choice = input('输入你的选择:') if choice == '1': 100/0 elif choice == '2': [][2] except ZeroDivisionError: print ('出现 ZeroDivisionError') except IndexError : print ('出现 IndexError')
|
三、 获取异常对象
使用 except
语句匹配异常类型的时候,可以使用 as
关键字,后面加变量名称,这用可以把产生异常的对象赋值给变量。
1 2 3 4
| try: 100/0 except ZeroDivisionError as e: print (f'异常对象信息:{e}')
|
执行结果:
四、 匹配所有异常
当我们不知道代码会抛出什么类型的异常时,可以匹配 所有类型 的异常。
1 2 3 4
| try: 100/0 except Exception as e: print('未知异常:', e)
|
还有一种更简洁的写法:
1 2 3 4
| try: 100/0 except: print('未知异常:')
|
traceback
模块 中的 format_exc
函数 可以更详细的显示异常信息。
1 2 3 4 5 6
| import traceback
try: 100/0 except : print(traceback.format_exc())
|
执行结果:
1 2 3 4
| Traceback (most recent call last): File "xxxx/xxx.py", line 4, in <module> 100/0 ZeroDivisionError: division by zero
|
五、 自定义异常
自定义 异常类型,通过 raise
关键字来抛出对应的 自定义异常
自定义异常:
1 2 3 4 5 6 7
| class InvalidCharError(Exception): pass
class NotChinaTelError(Exception): pass
|
异常调用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| def register(): tel = input('请注册您的电话号码:')
if not tel.isdigit(): raise InvalidCharError()
if not tel.startswith('86'): raise NotChinaTelError() return tel
try: ret = register() except InvalidCharError: print('电话号码中有错误的字符') except NotChinaTelError: print('非中国手机号码')
|