在Python语句中,当语句本身没有错误,但由于输入的错误会导致一系列的错误。或者有些代码写出来有错误,但是自己还需要他继续运行的情况,这个时候就需要try…except语句来进行代码的执行。
try…except语句
举个例子,我们进行两个整数的除法运算,代码如下:
a = int(input("请输入整数:"))
b = int(input("请输入整数:"))
c = a / b
print("运算的结果为:" , c)
输出为:
请输入整数:100
请输入整数:20
运算的结果为: 5.0
但是当我们在输入第一个数字为字符串类型,或者第二个数字为0时,会分别出现以下的错误:
ValueError: invalid literal for int() with base 10: 'a'
ZeroDivisionError: division by zero
此时,我们希望程序继续运行下去,则需要对错误进行排除和设置在错误时程序的行为,这个时候就需要用到try语句:
try:
需要调试的语句
except 错误类型:
发现错误时,执行的语句
仿照上面的语句语法,对之前的程序进行修改:
try:
a = int(input("请输入整数:"))
b = int(input("请输入整数:"))
c = a / b
print("运算的结果为:" , c)
except ZeroDivisionError:
print("除数不能为0")
except ValueError:
print("请输入整数")
则当除数输入为0时,输出为:
请输入整数:0
请输入整数:0
除数不能为0
当输入为字符串类型时,输出为:
请输入整数:10
请输入整数:a
请输入整数
利用try…except的语句就可以实现在错误的情况下程序的运行,以及输出错误时候的行为。但是要注意的是,except语句的错误捕获是从子类开始捕获的,解决不了就去找父类,依次类推。
try…except…else语句
上述的方法,是因为程序简单,我们能够猜到可能出现的错误,从而使用except进行分列,实现对错误类型的避免。但是大部分情况下,我们是不知道错误类型。这个时候我们可以用BaseException代替所有可能的错误,进行变量的输出,得到错误的类型:
try:
a = int(input("请输入整数:"))
b = int(input("请输入整数:"))
c = a / b
except BaseException as e:
print("程序错误:",e)
当输入除数为0时:
请输入整数:1
请输入整数:0
程序错误: division by zero
当输入字符串时:
请输入整数:a
程序错误: invalid literal for int() with base 10: 'a'
当没有错误,需要程序继续运行时,就要用到else语句。
try:
需要调试的语句
except 错误类型:
发现错误时,执行的语句
else:
当程序没有出现错误时,进行else语句下的行为
对以上程序进行修改可以得到:
try:
a = int(input("请输入整数:"))
b = int(input("请输入整数:"))
c = a / b
except BaseException as e:
print("程序错误:",e)
else:
print("运算结果为:",c)
程序输出,当有错误时:
请输入整数:a
程序错误: invalid literal for int() with base 10: 'a'
当没有错误时:
请输入整数:10
请输入整数:5
运算结果为: 2.0
在程序运行时,except…之后的语句与else…之后的语句相当于一个并行结构,如下图所示:
try…except…else…finally语句
加上finally语句后,目的是实现不管程序是否出现错误,都将程序运行结束,并释放内存。加上finally语句后,except和else依旧为并行结构,但最终,都会运行到finally语句上。上述结构图就变为:
上文的程序可以修改为:
try:
a = int(input("请输入整数:"))
b = int(input("请输入整数:"))
c = a / b
except BaseException as e:
print("程序错误:",e)
else:
print("运算结果为:",c)
finally:
print("运算结束")
print("程序结束")
当输入错误时:
请输入整数:-
程序错误: invalid literal for int() with base 10: '-'
运算结束
程序结束
当输入正确时:
请输入整数:10
请输入整数:2
运算结果为: 5.0
运算结束
程序结束
以上便是全部用法。