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.
"""

浙公网安备 33010602011771号