CodeGym /Java 课程 /Python SELF ZH /处理多个异常

处理多个异常

Python SELF ZH
第 17 级 , 课程 3
可用

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}")

若发生ValueErrorZeroDivisionError,它将被except块捕获。异常的信息将通过变量e可用。输出将包含错误类型及创建异常时传递的参数。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION