Python3入门之异常处理–基本功能

错误代码示例:

open("xxx.txt")               #要打开的文件不存在   程序报错类型为NameError
    print(num)                    #要输出的变量不存在   程序报错类型为FileNotFoundError

异常处理:
1)try……except……

try:
    open("xxx.txt")               #要打开的文件不存在   程序报错类型为NameError
    print(num)                    #要输出的变量不存在   程序报错类型为FileNotFoundError
    
except (NameError,FileNotFoundError):  #多个错误可以写在一行用元组形式,也可以分开写多个except
    print("如果捕获到异常后做的 处理....")

在except后写上出现的错误名即可,出现已经写的错误时,就会执行except下面的代码。但是,如果出现没有写的错误类型,程序依然会产生异常!
2)try……except Exception……

try:
    open("xxx.txt")
    print(num)

except (NameError,FileNotFoundError):
    print("如果捕获到异常后做的 处理....")
except Exception:
    print("如果用了Exception,那么意味着只要上面的except没有捕获到异常,这个except一定会捕获到")

写上except Exception:可以捕获到程序出现在(NameError,FileNotFoundError)里没有标明的异常类型,然后执行except Exception:下的代码

提示:在Exception后添加as+变量名可以通过输出该变量来查看程序出现的错误类型。
示例:

try:
    11/0                          #分母不能为0,但是下面except后元组中并没有标明该异常类型
    open("xxx.txt")               #要打开的文件不存在   程序报错类型为NameError
    print(num)                    #要输出的变量不存在   程序报错类型为FileNotFoundError

except (NameError,FileNotFoundError):
    print("如果捕获到异常后做的 处理....")
except Exception as temp:
    print("如果用了Exception,那么意味着只要上面的except没有捕获到异常,这个except一定会捕获到")
    print(temp)

运行结果:

如果捕获到异常后做的 处理....
如果用了Exception,那么意味着只要上面的except没有捕获到异常,这个except一定会捕获到
division by zero

3)try……except……else……

try:
    11/0                          #分母不能为0,但是下面except后元组中并没有标明该异常类型
    open("xxx.txt")               #要打开的文件不存在   程序报错类型为NameError
    print(num)                    #要输出的变量不存在   程序报错类型为FileNotFoundError

except (NameError,FileNotFoundError):
    print("如果捕获到异常后做的 处理....")
except Exception as ret:
    print("如果用了Exception,那么意味着只要上面的except没有捕获到异常,这个except一定会捕获到")
    print(ret)
else:
    print("没有异常才会执行的功能")

exit语句后代码块,是在try……中没有产生异常才会执行。
4)try……finally……

try:
    11/0                          #分母不能为0,但是下面except后元组中并没有标明该异常类型
    open("xxx.txt")               #要打开的文件不存在   程序报错类型为NameError
    print(num)                    #要输出的变量不存在   程序报错类型为FileNotFoundError

except (NameError,FileNotFoundError):
    print("如果捕获到异常后做的 处理....")
except Exception as ret:
    print("如果用了Exception,那么意味着只要上面的except没有捕获到异常,这个except一定会捕获到")
    print(ret)
else:
    print("没有异常才会执行的功能")
finally:
    print("------finally-----")

finally语句后的代码块,无论try语句后程序是否产生异常都会执行。
(在程序中,如果一个段代码必须要执行,即无论异常是否产生都要执行,那么此时就需要使用finally。 比如文件关闭,释放锁,把数据库连接返还给连接池等)