目录
前言
Python使用被称为异常的特殊对象来管理程序执行期间发生的错误。每当发生让Python不知所措的错误时,它都会创建一个异常对象。那么怎样进行异常处理呢,接下来我们就来学习一下异常处理。
异常
即便 Python 程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。异常是使用try-except代码块处理的。try-except代码块让Python执行指定的操作,同时告诉Python发生异常时该怎么办。使用了try-except代码块时,即便出现异常,程序也将继续运行:显示我们编写的友好的错误消息,而不是令用户迷惑的traceback。
使用try-except代码块
当我们认为可能发生了错误时,可编写一个try-except代码块来处理可能引发的异常。类似于下面这样:
while True:
try:
x = int(input("请输入一个数字: "))
break
except ValueError:
print("您输入的不是数字,请再次尝试输入!")
这个示例是假如我们输入的不是一个数字的话,那就提示用户输入错误。
注意:
- 一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行;
- 如果在执行 try 子句的过程中发生了异常,那么 try 子句余下的部分将被忽略;
- 如果异常的类型和 except 之后的名称相符,那么对应的 except 子句将被执行;
- 如果一个异常没有与任何的 except 匹配,那么这个异常将会传递给上层的 try 中;
- 如果没有异常发生,忽略 except 子句,try 子句执行后结束;
- 一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组。
try/except...else语句
try/except 语句还有一个可选的 else 子句,如果使用这个子句,那么必须放在所有的 except 子句之后。else 子句将在 try 子句没有发生任何异常的时候执行。
try:
y = int(input("请输入一个数字: "))
except ValueError:
print("你输入的数字不是一个数字,请重新输入")
else:
print("你输入的数字为:{}".format(y))
try-finally 语句
try-finally 语句无论是否发生异常都将执行最后的代码。
try:
y = int(input("请输入一个数字: "))
except ValueError:
print("你输入的数字不是一个数字,请重新输入")
else:
print("你输入的数字为:{}".format(y))
finally:
print("不管有没有发生异常,都会执行该语句")
抛出异常
Python 使用 raise 语句抛出一个指定的异常。
raise语法格式如下:
raise [Exception [, args [, traceback]]]
以下实例如果 x 大于 10 就触发异常::
x = 20
if x > 10:
raise Exception('x 不能大于 1。x 的值为: {}'.format(x))
执行以上代码会触发异常:
Traceback (most recent call last):
File "C:\Users\霖\Desktop\message\message.py", line 3, in <module>
raise Exception('x 不能大于 10。x 的值为: {}'.format(x))
Exception: x 不能大于 10。x 的值为: 20
处理ZeroDivisionError异常
ZeroDivisionError异常是因为除数为零,例如
print(5/0)
显然,Python无法这样做,因此你将看到一个Traceback:
如何避免这个错误呢,我们只要使用try-except代码块,例如:
try:
print(5/0)
except ZeroDivisionError:
print("You can'divide by zero!")
输出结果为:
You can'divide by zero!
处理FileNotFoundError异常
使用文件时,常见的问题是找不到文件:我们要查找的文件可能在其他地方、文件名可能不正确或者这个文件根本就不存在。对于所有这些情形,都可以使用try-except代码块以直观的方式进行处理。
我们来尝试读取一个不存在的文件。例如:
filename='alice.txt'
with open(filename) as obj:
contents=obj.read()
Python无法读取不存在的文件,因此它引发了一个异常:
在这个示例中,这个错误是函数open()导致的,因此要处理这个错误,必须将try语句放在包含open()代码行之前:
filename='alice.txt'
try:
with open(filename) as obj:
contents=obj.read()
except FileNotFoundError:
msg="Sorry,the file"+filename+"does not exist"
print(msg)
在这个示例中,try代码块引发FileNotFoundError异常,因此Python找出与该错误匹配的except代码块,并运行其中的代码。最终的结果是显示一条友好的错误消息,而不是traceback。输出结果为:
Sorry,the filealice.txtdoes not exist
最后
好啦,Python的异常处理讲到这里啦,有不懂的、讲得不好的地方可以留言和我讨论一下,谢谢观看,我们下篇文章再见!!!