首页 > 编程笔记 > Python笔记 阅读:18

Python try异常处理语句的用法(非常详细,附带实例)

在编写 Python 程序时,遇到的错误通常分为语法错误和运行错误。

所谓语法错误,例如输出字符串“Hello,ShenZhen!”的代码为:
print Hello,ShenZhen!
运行程序,结果为:
  File"demo.py", line 1
    print Hello,ShenZhen!
                       ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(Hello,ShenZhen!)?
代码有语法错误,提示缺少小括号,这种错误属于语法错误。

所谓运行错误,假设 a 为 8,b 为 0,输出 a 除以 b 的结果。输入代码:
a=8
b=0
print(a/b)
运行程序,结果为:
Traceback (most recent call last):
  File"demo.py", line 3, in
    print(a/b)
ZeroDivisionError: division by zero
此时会产生运行错误,因为 0 不可以作为除数。

按照报错信息进行改正,将 0 换为 2 后,就不会报错了,运行结果为:
4.0

Python try except语句

try except 语句是一种异常处理机制,用于捕获、处理可能引发异常的代码块,语法如下:
try:
    # 可能引发异常的代码块
    # 希望捕获异常的代码
except [异常类型1]:
    # 处理异常的代码块 1
except [异常类型2]:
    # 处理异常的代码块 2
...
except [异常类型N]:
    # 处理异常的代码块 N
else:
    # 如果没有引发任何异常,则执行此代码块
finally:
    # 无论是否引发异常,都会执行此代码块
下面举例子进行说明。定义 a 为 12,b 为 2,输出 a 除以 b 的结果。输入代码:
try:
    a = int(12)
    b = int(2)
    c = a / b
    print("a/b 的结果是:", c)
except (ValueError, ArithmeticError):
    print("不能被 0 整除,请更换一个整数")
except:
    print("未知错误,请检查")
print("程序继续运行")
运行程序,结果为:

a/b 的结果是: 6.0
程序继续运行

此时代码没有产生异常。如果将 b 改为 0,则会引发一个异常,此时会显示提前设定好的错误提示信息“不能被 0 整除,请更换一个整数”:
不能被 0 整除,请更换一个整数
程序继续运行

Python try except else语句

在 try except else 语句中,如果 try 语句没有捕获到任何异常,则执行 else 语句中的代码;相反,如果 try 语句捕获到异常,则调用对应的 except 语句进行异常处理,此时不会执行 else 语句中的代码。

下面使用 try except else 语句。定义 a 为 2,输入代码:
try:
    a = 2
    b = 10 / a
    print(b)
except ValueError:
    print('必须输入整数')
except ArithmeticError:
    print('除数不能为 0, 请重新输入')
else:
    print('没有出现异常')
print("执行完成")
运行程序,结果为:
5.0
没有出现异常
执行完成
由此可见,a 为 2 时,先执行 print(b) 语句,再执行 else 语句中的代码。

下面进行异常处理,将 a 的值改为整数 0,程序的运行结果为:
除数不能为 0, 请重新输入
执行完成
由此可见,a 为整数 0 时,代码异常,会先执行 print('除数不能为0,请重新输入') 语句,再执行 print("执行完成") 语句,不会执行 else 语句中的代码。

Python try except finally语句

try except finally 语句用于处理异常和执行清理操作,语法如下:
try:
    # 代码块,可能会抛出异常
except ExceptionType1:
    # 异常处理代码块,用于处理 ExceptionType1 类型的异常
except ExceptionType2:
    # 异常处理代码块,用于处理 ExceptionType2 类型的异常
finally:
    # 清理操作的代码块,无论是否捕获异常都会执行此部分
try 块中的代码是我们希望执行的代码块。如果在执行这些代码时抛出了异常,则会跳过后续 try 块中的代码,并查找匹配的 except 块以处理异常。如果找到了匹配的 except 块,则执行相应的处理代码。如果没有找到匹配的 except 块,或者在处理异常时又抛出了新的异常,则将向上传递异常。

无论是否捕获到异常,都会执行 finally 语句。finally 语句通常用于执行一些清理操作,如关闭文件、释放资源。即使在 try 块中抛出了异常,finally 语句也会被执行。

下面举一个例子:
try:
    # 尝试执行可能引发异常的代码
    x = 1 / 0
except ZeroDivisionError:
    # 处理 ZeroDivisionError 异常
    print("除数不能为零")
finally:
    # 执行清理操作的代码
    print("清理操作")
运行结果为:
除数不能为零
清理操作
在这个例子中,试图用 1 除以 0,这会引发 ZeroDivisionError 异常。except ZeroDivisionError 语句捕获到这个异常并打印一条消息。finally 语句会被执行,并打印出一条”清理操作”的消息。

try except finally 语句提供了一种结构化的方式来处理异常,并在异常处理后执行一些清理操作,使我们能更好地控制程序的流程,同时确保资源的正确释放。

下面再举一个例子。输入代码:
try:
    a = int(2)
    print(10 / a)
except:
    print("执行 except 发生错误异常")
else:
    print("执行 else 块中的代码")
finally:
    print("执行 finally 块中的代码")
运行结果为:
5.0
执行 else 块中的代码
执行 finally 块中的代码

相关文章