异常处理写法以及如何主动跑出异常(应用场景)?

参考回答

在 Python 中,异常处理使用 try...except 语句来捕获和处理可能发生的错误。通过这种方式,我们可以在程序出现问题时,避免程序崩溃,并提供有效的错误提示或者替代处理。

异常处理的基本写法:

try:
    # 可能会抛出异常的代码
    x = 1 / 0  # 例如,除以零
except ZeroDivisionError:
    # 捕获到 ZeroDivisionError 异常后执行的代码
    print("不能除以零!")
else:
    # 如果没有异常发生,则执行此代码块
    print("没有错误")
finally:
    # 无论是否发生异常,都会执行的代码
    print("程序结束")
Python

在上面的例子中:
try 块中的代码尝试执行,如果没有异常,则继续执行。
except 块捕获异常并处理。
else 块只有在没有发生异常时执行。
finally 块无论异常是否发生都会执行,通常用于清理资源。

如何主动抛出异常:
有时我们需要主动抛出异常,例如当遇到不符合预期的输入或状态时,可以通过 raise 语句来抛出异常。

例如,主动抛出一个 ValueError 异常:

def divide(a, b):
    if b == 0:
        raise ValueError("除数不能为零")  # 主动抛出异常
    return a / b

try:
    result = divide(10, 0)
except ValueError as e:
    print(f"错误: {e}")
Python

在这个例子中,我们通过 raise 主动抛出一个 ValueError 异常,当除数为零时,程序会捕获并处理这个异常。

详细讲解与拓展

  1. try...except 语句的工作原理:
    • try 块:程序会尝试执行其中的代码。
    • except 块:如果 try 中的代码抛出指定的异常,程序会跳转到相应的 except 块执行错误处理代码。可以指定捕获特定类型的异常,也可以使用 except 不带异常类型来捕获所有异常。
    • else 块:如果没有异常发生,else 块的代码会执行。它通常用于处理那些在没有异常时需要执行的操作。
    • finally 块:无论是否发生异常,finally 块的代码都会执行,常用于资源的释放,比如文件的关闭或数据库连接的释放。
  2. 主动抛出异常(raise):
    • 使用 raise 可以主动抛出异常。可以使用内建异常类,也可以自定义异常类。
    • raise 可以用来处理一些特殊情况,比如无效的输入、非法状态或需要强制终止的错误条件。

    示例:自定义异常类

    class NegativeValueError(Exception):
       """自定义异常类"""
       pass
    
    def check_positive(x):
       if x < 0:
           raise NegativeValueError("值不能为负数")
       return x
    
    try:
       check_positive(-10)
    except NegativeValueError as e:
       print(f"自定义错误: {e}")
    
    Python
  3. 异常处理的应用场景:
    • 输入验证: 当程序需要处理用户输入时,如果输入不合法,可以使用异常处理来确保程序的稳定性。
      def get_age():
       age = input("请输入年龄: ")
       try:
           age = int(age)
       except ValueError:
           print("请输入有效的数字!")
      
      Python
    • 文件操作: 当处理文件时,可能会遇到文件不存在、无法访问等错误,通过异常处理来捕获这些问题。
      try:
       with open("non_existent_file.txt", "r") as file:
           content = file.read()
      except FileNotFoundError:
       print("文件不存在!")
      
      Python
    • 网络请求: 当进行网络请求时,可能会遇到连接错误、超时等异常,通过捕获这些异常来保证程序不会崩溃。
      import requests
      try:
       response = requests.get("http://example.com")
       response.raise_for_status()
      except requests.exceptions.RequestException as e:
       print(f"请求失败: {e}")
      
      Python
  4. 总结:
    • 异常处理 通过 try...except 语句让程序在遇到错误时能够优雅地处理,而不是直接崩溃。
    • 主动抛出异常 可以通过 raise 来处理不符合预期的情况,让程序按照预定的规则运行。
    • 异常处理可以提高程序的健壮性,常见的应用场景包括输入验证、文件操作和网络请求等。

通过理解和使用异常处理,可以让代码更稳定、易于维护和调试。

发表评论

后才能评论