Python try except

Python try except教程

Python 中,try 语句有三种形式,即 try - except 的形式, try - finally 的形式或者是 try - except - finally 的组合形式。一个 try 语句可以对应一个或多个 except 语句,但只能对应一个 finally 子句。

Python try except语句详解

语法

try: # 需要检测异常的代码 except Exception: # 处理异常的代码

说明

将需要检测异常的代码放在 try 语句里面,如果发生异常,则将需要对异常处理的代码放在 exception 语句里。

Python try except语句详解

语法

try: # 需要检测异常的代码 except Exception1: # 处理异常的代码1 except Exception2: # 处理异常的代码2 except Exception: # 处理异常的代码

说明

try 之后的 except 语句可以有任意多个,如果发生异常,那么 Python 解释器会挨个匹配这些异常,如果匹配成功,那么就不会继续执行下面的异常处理代码,如果全部匹配不成功,那么会终止程序的执行。

在使用多个 except 语句时,我们最好是按照异常的最小子类写在上面,依次往下书写异常的父类,不然,如果我们将父类写在子类的前面,那么子类永远不会触发到异常处理代码。比如:

try: # 需要检测异常的代码 except BaseException: # 处理异常的代码1 except Exception: # 处理异常的代码2 except ArithmeticError: # 处理异常的代码

如果,我们这样首先抓取 BaseException 异常,接着抓取 Exception 异常,最好再抓取 ArithmeticError 异常,那么这样,Exception 异常和 ArithmeticError 异常永远不会触发,因为所有的异常都属于 BaseException ,因此所有的异常都会匹配到 BaseException 的异常处理代码,因为,我们应该按照如下的方式书写:

try: # 需要检测异常的代码 except ArithmeticError: # 处理异常的代码1 except Exception: # 处理异常的代码2 except BaseException: # 处理异常的代码3

这样,我们按照从异常的子类,不断的写到异常的父类的方式来书写异常类才是正确的。

Python try except捕获多个异常详解

语法

try: # 需要检测异常的代码 except (exception1, exception2): # 处理异常的代码1 except Exception3: # 处理异常的代码2 except Exception4: # 处理异常的代码3

说明

如果我们需要同时捕获多个异常,并且多个异常的处理逻辑是一样的,那么我们可以使用 () 的形式来缩写。

案例

Python try except 捕获异常

使用 Python try except 捕获异常

if __name__ == '__main__': print("嗨客网(www.haicoder.net)") num = input("Please input a number:") print("Your input is:", int(num))

程序运行后,控制台输出如下:

01 python try except异常.png

我们在 main 函数里,使用 input 让用户输入,接着,我们将用户输入的 字符串 进行了 强制类型转换,转换成了 int 类型。

因为,我们输入的就是一个数字,因此,这里的转换成功,程序运行正常,现在,我们输入一个不是数字的字符串,程序运行后,控制台输出如下:

02 python try except异常.png

这次,我们输入的不是数字,而是一个字符串,这次将字符串转换成数字转换失败,因此,程序报出了异常,程序被异常终止,我们使用 try except 来捕获该异常,将代码修改如下:

if __name__ == '__main__': print("嗨客网(www.haicoder.net)") try: num = input("Please input a number:") print("Your input is:", int(num)) except Exception: print("convert to number error")

程序运行后,控制台输出如下:

03 python try except异常.png

我们看到,这次,我们同样输入了字符串,将字符串转换成数字转换失败,但是这次程序没有报错,因为,我们使用 try except 捕获了异常,因此,程序走到了 except 的逻辑。

Python try 多个 except 语句捕获异常

使用 Python try 多个 except 语句捕获异常

if __name__ == '__main__': print("嗨客网(www.haicoder.net)") try: num = input("Please input a number:") print("Your input is:", int(num)) except BaseException: print("convert to number error in BaseException") except Exception: print("convert to number error in Exception")

程序运行后,控制台输出如下:

04 python try except异常.png

我们在一个 try 语句后面,接了两个 except 语句,第一个 except 语句捕获的是 BaseException 异常,第二个 except 语句捕获的是 Exception 异常。

从异常 继承 关系来看,BaseException 是 Exception 类的父类,因此我们出发的异常虽然属于 Exception ,也同时属于 BaseException ,但由于 BaseException 写在第一个,因此匹配了 BaseException 的处理代码,Exception 的逻辑不再触发。现在,我们将代码修改如下:

if __name__ == '__main__': print("嗨客网(www.haicoder.net)") try: num = input("Please input a number:") print("Your input is:", int(num)) except Exception: print("convert to number error in Exception") except BaseException: print("convert to number error in BaseException")

程序运行后,控制台输出如下:

05 python try except异常.png

我们看到,这次,只触发了 Exception 异常,没有触发 BaseException 异常。

Python try多个except语句会挨个匹配

当含有多个 except 语句时,会挨个匹配异常逻辑

if __name__ == '__main__': print("嗨客网(www.haicoder.net)") try: num = input("Please input a number:") print("Your input is:", int(num)) except ArithmeticError: print("convert to number error in ArithmeticError") except AttributeError: print("convert to number error in AttributeError") except ValueError: print("convert to number error in ValueError") except Exception: print("convert to number error in Exception")

程序运行后,控制台输出如下:

06 python try except异常.png

我们在一个 try 语句后面,接了多个 except 语句,这里,我们输入了错误的值,将数字类型写成了字符串类型,因此,第一个 ArithmeticError 和第二个 AttributeError 都不会触发,因为,触发的类型不是这两种异常。

这里匹配成功的异常,其实就是 ValueError,因此匹配 ValueError 异常成功,因此执行了 ValueError 的异常处理代码,因为 ValueError 的异常已经匹配成功,所以 Exception 异常不会再继续匹配。

Python try except教程总结

在 Python 中,try 语句有三种形式,即 try - except 的形式, try - finally 的形式或者是 try - except - finally 的组合形式。一个 try 语句可以对应一个或多个 except 语句,但只能对应一个 finally 子句。