python 异常处理
目录
异常
报错、报错类型
异常处理
一般异常处理语句
不同类型异常单独处理语法
不同类型异常统一处理语法
try...expect...else
try...expect...else...finally
捕获异常
抛出异常
异常?
异常是一个事件,该事件在程序执行的过程中发生,影响程序的正常运行。
异常在python中是一个对象,程序在运行中,发生异常,没有捕获异常程序会中断。
报错类型
print(x) # error: # NameError: name 'x' is not defined.
说明:
NameError为报错类型。
异常处理
如果你不想在异常发生时结束程序的运行,使用try/except捕获异常。
一般异常处理语句
语法:
try: 被检测的代码块 except: 检测到异常,就执行这个位置的逻辑
说明:
1. 如果try语句发生错误时,就会执行expect语句,处理异常。
2. 如果try语句没有发生异常,不会执行expect语句。
不同类型异常处理语句
语法:
try: 被检测的代码块 except NameError: 触发NameError时对应的处理逻辑 except IndexError: 触发IndexError时对应的处理逻辑 except KeyError: 触发KeyError时对应的处理逻辑
案例:
try: print(x) except IndexError: print("IndexError") except NameError: print("NameError") # input # NameError
不同类型异常统一处理语句
语法:
try: 被检测的代码块 except (NameError,IndexError,TypeError): 触发NameError或IndexError或TypeError时对应的处理逻辑
案例:
try: print(x) except (IndexError, NameError): print("hello world")
不同类型异常一种语句处理
语法:
try: 被检测的代码块 except Exception: 其他类型的异常统一用此处的逻辑处理
案例:
try: print(x) except Exception: print("hello world") # input # hello world
try...expect...else
多分支except之后跟else(else只能跟在except后,不能单独处在),
只有在try语句中没有异常发生情况下,才会执行else语句。
语法:
try: 被检测的代码块 except 异常类型1: pass except 异常类型2: pass else: 没有异常发生时执行的代码块
try...expect...else...finally
无论被检测的代码块是否触发异常,都会执行finally的子代码块。
作用:一般作为回收资源。如:关闭打开的文件;关闭数据库连接等。
语法:
try: 被检测的代码块 except 异常类型1: pass except 异常类型2: pass else: 没有异常发生时执行的代码块 finally: 无论有无异常发生都会执行的代码块
案例:
f=None try: f=open(‘db.txt’,'r',encoding='utf-8') s=f.read().strip() int(s) # 若字符串s中包含非数字时则会触发异常ValueError # f.close() # 若上面的代码触发异常,则根本不可能执行到此处的代码,应该将关闭文件的操作放到finally中 finally: if f: # 文件存在则f的值不为None f.close()
捕获异常
处理程序异常的同时,后去异常的内容。
语法:
try: #code- run except NameError as e: # get error
案例:
try: print(x) except Exception as e: print(e) # input # name 'x' is not defined
抛出异常
raise主动抛出异常,raise后必须是一个异常的类或是异常的实例。
案例:
a = "a" if not isinstance(a, int): raise TypeError("a is not int type.") # input """ Traceback (most recent call last): File "d:\tools\test.py", line 4, in <module> raise TypeError("a is not int type.") TypeError: a is not int type. """