什么是异常?
异常是一个事件,该事件会在程序的执行中发生,影响程序的正常运行,一般情况下,在python无法正常处理程序时,就会发生异常。异常在python的对象中,就是一个错误。我们要捕获并处理异常,否则程序将会终止进行。
捕获异常的语法如下:
try:
<语句> #运行别的代码
except <名字>:
<语句> #如果在try部分发生了异常。
#-*-coding:UTF-8 -*- def exp_execption(x,y): try: a=x/y print('a=',a) return a except Exception: print("程序执行异常,异常信息:被除数为0") exp_execption(2,0)
Python 使用raise 语句抛出了一个指定异常。我们可以使用类(Exception的子类)或者实例参数调用raise语句引发异常。使用类时程序会自动创建实例
捕获多个异常
#-*-coding:UTF-8 -*- def mult_execption(x,y): try: a=x/y b=name except ZeroDivisionError: print('this is ZeroDivisionError') except NameError: print("this is NameError") mult_execption(2,0)
如果把a=x/y注释掉或者放到b=name下面,则得到的执行结果为:
this is NameError
捕捉对象:
如果希望在except子局中访问异常对象本身,也就是看到一个异常对象真正的异常信息,而不是输出自己定义的异常信息,可以使用as e 的形式,我们称之为捕捉对象
#-*-coding:UTF-8 -*- def model_execption(x,y): try: b=name a=x/y except(ZeroDivisionError,NameError,TypeError) as e: print(e) model_execption(2,0) [python@master test]$ python3 d.py name 'name' is not defined
finally 子句
Python中的finally子句需要和try子句一起使用,组成try/finally的语句形式,无论发生异常与否,都会执行最后的代码
#-*- coding:UTF-8 -*- def use_finally(x,y): try: a=x/y except ZeroDivisionError: print('some bad thing happed:division by zero') finally: print('No matter what happened,I will show in front of you') use_finally(2,0) [python@master test]$ python3 a.py some bad thing happed:division by zero No matter what happened,I will show in front of you
finally子句在关闭文件或者数据库连接时非常有用。