异常
在 Python 中,即使你的代码没有语法错误,也不能保证程序按照你的想法运行完毕,因为在程序执行过程中也会有错误。 程序运行期间检测到的错误被称为异常,例如:
'1' + 2
# 优化后
try:
'1' + 2
except Exception as e:
print(e)
finally:
pass
大多数的异常都不会被程序处理,都以错误信息的形式显示出来,如上例所示,提示信息告诉我们int类型不能和str类型相加。
错误提示信息会告诉我们异常发生的上下文,并以调用栈的形式显示具体信息,提示信息的最后一行开头会显示错误类型名称,上例中,错误类型为’TypeError’,表示类型异常。
什么是异常
异常是一个事件,该事件会在程序执行过程中发生,从而影响程序的正常执行。当 Python 遇到无法处理的程序时,就会引发一个异常。在 Python 中,异常是一个对象,用于表示一个错误,当 Python 脚本发生异常时我们需要捕获和处理它,否则程序会终止执行。
处理异常
Python 提供了 try/except 语句用来捕获和处理异常。try 语句用来检测语句块中是否有错误,except 语句则用来捕获 try 语句中的异常,并进行处理,附加的 else 可以在 try 语句没有异常时执行。
异常的参数
except 子句可以在异常名称后面指定一个变量。这个变量和一个异常实例绑定,它的参数是一个元组,通常包含错误字符串,错误数字,错误位置,存储在 .args 中。为了方便起见,异常实例定义了__str__() ,因此可以直接打印参数而无需引用 .args。
try:
x = 1 / 0 # 除数为0
except ZeroDivisionError as err: #为异常指定变量err
print("Exception")
print(err.args) #打印异常的参数元组
print(err) #打印参数,因为定义了__str__()
触发异常
Python 提供了 raise 语句用于手动引发一个异常。
raise [Exception [, args [, traceback]]]
Exception:异常的类型,例如 ZeroDivisionError
args:异常参数值,可选,默认值 "None"
traceback:可选,用于设置是否跟踪异常对象
def diyException(level):
if level > 0:
raise Exception("raise exception", level) #主动抛出一个异常,并且带有参数
print('我是不会执行的') #这行代码不会执行
try:
diyException(2) #执行异常方法
except Exception as err: #捕获异常
print(err) #打印异常参数