Python异常处理(try except finally)
Python 允许我们捕捉异常的错误类型,并允许自行编写异常处理程序,当异常被捕捉时就会去执行异常处理程序,接着程序仍可继续执行。
本文将讨论 Python 程序设计时的错误种类与异常处理。
认识异常
异常是指程序执行时产生了“不可预期”的错误,这时 Python 解释器会接手处理异常,发出错误信息,并将程序终止。也就是说,好的程序必须考虑到可能发生的异常,并拦截下来加以适当的处理。例如,两数进行相除时,除数不可以为 0,如果没有编写异常处理的程序代码,当除数不小心被输入 0 时,就会发生除 0 的错误信息,并造成程序的中断,这当然不是一种好的处理方式。
下面就先从发生除 0 错误的例子进行讲解。
【示例1】除 0 错误。python代码如下:
a=int(input('请输入被除数:')) b=int(input('请输入除数:')) print(a/b)输出结果:
请输入被除数:8
请输入除数:2
4.0
请输入被除数:4
请输入除数:0
Traceback (most recent call last):
File "C:\Users\27580\Desktop\2.py", line 3, in <module>
print(a/b)
ZeroDivisionError: division by zero
try…except…finally语句
在 Python 中要捕捉异常及设计异常处理程序,就必须使用try…except…finally
语句,其语法格式如下。
try:
可能发生异常的语句
except 异常类型:
# 针对错误类型1,对应的代码处理
except异常类型: #只处理所示的异常
处理状况一
except (异常类型1, 异常类型2, …):
处理状况二
except异常类型as 名称:
处理状况三
except : #处理所有异常情形
处理状况四
else :
#未发生异常的处理
finally :
# 无论是否有异常,都会执行的finally语句代码
-
try 语句后要有冒号
:
来形成程序块,并在此加入引发异常的语句。 -
except 语句配合异常类型来截取或捕捉 try 语句区段内引发异常的处理。同样地,except 语句之后要用冒号
:
形成程序块。 - else 语句则是未发生异常时所对应的程序块。else 语句为选择性语句,可以加入也可以省略。
- 无论有无异常引发,finally 语句所形成的程序块一定会被执行。finally 语句为选择性语句,可以加入也可以省略。
try…except…finally实例演练
以【示例1】为例,一旦不小心除数输入为 0,系统就会捕捉到这个错误。当捕捉到除 0 错误时,产生的异常类型为“ZeroDivisionError”,然后输出错误信息。【示例2】在发生除 0 错误时加入异常处理机制。python代码如下:
def check(a,b): try: return a/b except ZeroDivisionError: #除数为0的处理程序 print('除数不可为0') a=int(input('请输入被除数:')) b=int(input('请输入除数:')) print(check(a,b))正确的输出结果:
请输入被除数:8
请输入除数:2
4.0
请输入被除数:8
请输入除数:0
除数不可为0
None
try…except指定异常类型
如果希望捕捉到的异常类型能更精确,除了前面列举的除 0 错误外,下面还列举了几种常见的异常类型,如表 1 所示。异常类型 | 说明 |
---|---|
FileNotFoundError | 找不到文件的错误 |
NameError | 名称未定义的错误 |
ZeroDivisionError | 除0错误 |
ValueError | 使用内置函数时,参数中的类型正确,但值不正确的错误 |
TypeError | 类型不符的错误 |
MemoryError | 内存不足的错误 |
下面的程序示例要求用户输入总业绩和业务员人数,然后计算全体业务人员的平均销售业绩。为了避免错误输入行为,可以根据不同的异常情况加入异常处理程序。
【示例3】在计算平均值的程序中加入异常处理。python代码如下:
try: money=int(input("请输入总业绩: ")) no=int(input("请输入有多少位业务人员: ")) average_sales=money/no except ZeroDivisionError: print("人数不可以为0") except Exception as e1: print("错误信息",e1.args) else: print("全体业务人员平均业绩= ", average_sales) finally: print("最后一定要执行的程序块")没有发生异常的执行结果:
请输入总业绩: 200000
请输入有多少位业务人员: 5
全体业务人员平均业绩= 40000.0
最后一定要执行的程序块
请输入总业绩: 200000
请输入有多少位业务人员: 0
人数不可以为0
最后一定要执行的程序块
请输入总业绩: 200000
请输入有多少位业务人员: p
错误信息 ("invalid literal for int() with base 10: 'p'",)
最后一定要执行的程序块
- 第 5~6 行:程序中使用了 except 语句来捕捉除 0 错误的异常。
- 第 7~8 行:如果程序捕捉到其他异常,则输出此异常的相关信息。
- 第 9~10 行:没有发生异常时,则会直接执行 else 语句内的程序代码。
-
第 11~12 行:无论有无发生异常,当要离开 try…except 时,都会执行
finally
语句内的程序代码。
声明:《Python系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。