4.1 捕获多个异常
Python允许通过使用多个except
块或一个包含异常的元组的except
块来处理多个异常。让我们来看看这两种方法。
多个except
块
你可以使用多个except
块来针对不同类型的异常进行不同的处理。
try:
# 可能导致异常的代码
result = int("abc")
except ValueError:
print("错误:无效的值。")
except ZeroDivisionError:
print("错误:除以零。")
一个包含异常元组的except
块
你可以在一个except
块中处理多个异常,通过将它们传递为一个元组。
try:
# 可能导致异常的代码
result = int("abc")
except (ValueError, ZeroDivisionError) as e:
print(f"发生错误: {e}")
使用except
NameError
as
var
在处理异常时,你可以使用语法
except
<ExceptionType>
as
<variable>
来获取
异常对象。这样可以访问异常的信息,比如错误消息和其他属性。
try:
# 可能导致 NameError 的代码
print(undeclared_variable)
except NameError as e:
print(f"发生错误: {e}")
print(f"错误类型: {type(e)}")
4.2 错误变量的作用域
保存异常的变量(上例中的e
)仅在其except
块内可用。在这个块之外
变量是不可用的。
try:
# 可能导致 NameError 的代码
print(undeclared_variable)
except NameError as e:
print(f"发生错误: {e}")
print(f"错误类型: {type(e)}")
# 此处 e 已不可用,下一行会导致 NameError
# print(e) # NameError: name 'e' is not defined
如果你想在异界块外对异常做些重要的事情,那么你需要把它保存在一个单独的变量中。示例:
exception = None
try:
# 可能导致异常的代码
result = int("abc")
except ValueError as e:
exception = e
print("错误:无效的值。")
except ZeroDivisionError as e:
exception = e
print("错误:除以零。")
print(exception)
注意,变量exception
保存了最后发生的异常,这在try
块之外的后续处理可能是有用的。
4.3 错误中包含的有用信息
异常对象包含错误的信息。根据异常类型,不同的异常对象可能包含不同的属性。
以下是大多数异常可用的一些常见属性:
-
args
: 一个包含创建异常时传递的参数的元组。通常这是错误消息。 -
message
: 一个包含错误消息的字符串(在某些异常中)。 -
__str__
: 返回异常的字符串表示的方法。该方法用于获取异常的文本表示,可以在异常对象上使用print()
函数返回。
示例:
try:
# 可能导致 ValueError 的代码
result = int("abc")
except ValueError as e:
print(f"发生错误: {e}")
print(f"错误参数: {e.args}")
print(f"错误消息: {str(e)}")
处理多个异常的示例
try:
# 可能导致多种类型异常的代码
result = 10 / 0
except (ValueError, ZeroDivisionError) as e:
print(f"发生错误: {e}")
print(f"错误类型: {type(e)}")
print(f"错误参数: {e.args}")
若发生ValueError
或ZeroDivisionError
,它将被except
块捕获。异常的信息将通过变量e
可用。输出将包含错误类型及创建异常时传递的参数。
GO TO FULL VERSION