Python之异常处理

目录

前言

异常

使用try-except代码块

try/except...else语句

try-finally 语句

抛出异常

处理ZeroDivisionError异常

处理FileNotFoundError异常

最后


前言

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 子句没有发生任何异常的时候执行。

else

try:
	y = int(input("请输入一个数字: "))
except ValueError:
	print("你输入的数字不是一个数字,请重新输入")
else:
    print("你输入的数字为:{}".format(y))

try-finally 语句

try-finally 语句无论是否发生异常都将执行最后的代码。

122321

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:

ZeroDivision

如何避免这个错误呢,我们只要使用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无法读取不存在的文件,因此它引发了一个异常:

111111

在这个示例中,这个错误是函数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的异常处理讲到这里啦,有不懂的、讲得不好的地方可以留言和我讨论一下,谢谢观看,我们下篇文章再见!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白巧克力LIN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值