- 错误:程序运行之前的语法问题。如:关键字、缩进不齐、符号不成对等
- 异常:程序运行过程中出现的问题。如:除数为0、下标越界、访问不存在的属性等
异常处理
- 说明:
- 异常处理就是在程序出现异常时进行人为的干预
- 可以认为是一种特殊的流程控制语句
- 提高代码的健壮性
- 基本语法:
try: print('正常执行') # a = 10 / 0 print([1, 2, 3][3]) print('运行结束') except Exception as e: # 在这里捕获异常,然后进行处理 print('出现异常', e) print('OVER')
- 多异常处理
''' # 每种异常都有特定的不同的处理方式 try: # print(a) # print(10 / 0) print([][3]) except NameError as e: print('NameError', e) except ZeroDivisionError as e: print('ZeroDivisionError', e) except Exception as e: print('OtherError', e) ''' # 多个异常有相同的处理方案,可以采用分组的方式 try: # print(a) print(10/0) except (NameError, ZeroDivisionError) as e: # 分组处理异常 print('NameError or ZeroDivisionError') except: # 当不需要异常信息时,可以不写异常类名及对象名称 print('OtherError')
- 完整异常处理
try: print('正常执行') print(a) except Exception as e: # 出现对应异常时执行 print('出现异常:', e) else: print('没有出现异常时执行') finally: print('无论有无异常都执行')
- 手动抛出异常
try: print('出现逻辑问题') # 创建一个异常对象,然后使用raise关键字抛出 raise Exception('手动抛出的异常') except Exception as e: print('出现异常:', e) print('OVER')
- 异常嵌套
print('我要去上班,什么也阻止不了我上班的脚步') try: print('我准备骑车去上班') raise Exception('不指定哪个粗心的家伙把我充电器弄掉了') print('骑车提前到达公司') except Exception as e: print('电车故障:', e) try: print('于是准备坐公交去上班') raise Exception('等了15分钟一直没有公交') print('坐公交准时到达公司') except Exception as e: print('公交异常:', e) print('于是我准备打车去上班') print('打车还是快,提前到达公司') print('热情满满的开始一天的工作')
- 自定义异常类
import time # 自定义异常类 class MyException(Exception): def __init__(self, msg): self.msg = msg def __str__(self): return self.msg # 异常处理函数 def deal(self): print('异常处理中...') time.sleep(1) print('异常处理完毕') try: print('正常运行') raise MyException('请求参数有误') except MyException as e: # 一定要放在系统异常之前,否则将不会捕获异常 print('自定义异常:', e) e.deal() except Exception as e: # Exception是其他异常的父类,必须放在最后 print('其他异常', e) print('处理其他异常') print('OVER')
- 特定场景应用
- 说明:特定场景指某个操作的环境,即上下文,如:文件上下文,最后一定要进行关闭操作。
with
:针对有上下文的情况,可以使用with
来确保操作结束时上下文的关闭操作。- 示例:
''' # 在文件读写的上下文中,无论是否有异常,结束后都需要进行文件关闭操作 fp = open() # 文件读写 fp.close() ''' ''' with open('xx') as fp: pass # 这里就是文件操作的上写文 # with语句结束时会自动执行关闭操作,不需要fp.close() # 也无论操作过程是否出现异常 ''' class Person: def __init__(self): print('__init__') # 进入上下文时执行 def __enter__(self): print('__enter__') # 退出上下文时执行 def __exit__(self, exc_type, exc_val, exc_tb): print('__exit__') print('异常类型', exc_type) print('异常信息', exc_val) print('异常追溯', exc_tb) with Person() as p: print('正常执行中') raise Exception('出现异常')
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~