• 常用
  • 百度
  • google
  • 站内搜索

资讯

Python 错误与异常处理,从入门到精通的全面指南

  • 更新日期:2025-12-02
  • 查看次数:1187

答案:Python通过try-except处理异常,支持自定义异常类、多异常捕获及traceback、pdb和logging等调试方法,提升程序健壮性。

Python 错误与异常处理从入门到精通

Python 错误与异常处理,简单来说,就是让你的代码在出错时不要直接崩溃,而是优雅地处理问题,甚至继续运行下去。这不仅能提升用户体验,也是保证程序健壮性的关键。

解决方案

Python 使用 try...except 块来处理异常。try 块包含可能引发异常的代码,而 except 块则定义了如何处理这些异常。

try:
  # 可能会出错的代码
  result = 10 / 0
except ZeroDivisionError:
  # 处理 ZeroDivisionError 异常
  print("除数不能为零!")
except Exception as e:
  # 处理其他类型的异常
  print(f"发生了其他错误:{e}")
else:
  # 如果 try 块中没有发生异常,则执行 else 块
  print(f"结果是:{result}")
finally:
  # 无论是否发生异常,都会执行 finally 块
  print("程序执行完毕。")

这段代码尝试进行除法运算,如果除数为零,就会引发 ZeroDivisionError 异常。except ZeroDivisionError 块捕获这个异常并打印错误信息。如果发生其他类型的异常,except Exception as e 块会捕获并打印错误信息。else 块仅在 try 块没有引发异常时执行。finally 块总是会被执行,无论是否发生异常,通常用于清理资源。

如何自定义异常?

有时,Python 内置的异常类型不足以满足我们的需求。这时,我们可以自定义异常类。

class MyCustomError(Exception):
  """自定义异常类"""
  def __init__(self, message):
    self.message = message
    super().__init__(self.message)

try:
  # 模拟一个错误情况
  age = -5
  if age < 0:
    raise MyCustomError("年龄不能为负数!")
except MyCustomError as e:
  print(f"自定义异常:{e}")

这个例子定义了一个名为 MyCustomError 的自定义异常类,它继承自 Exception。我们可以在代码中使用 raise 语句手动引发这个异常。

如何更有效地调试 Python 异常?

调试异常不仅仅是看到错误信息。更重要的是理解错误发生的原因和位置。

  1. 使用 traceback 模块: traceback 模块可以提供详细的错误堆栈信息,帮助你定位错误发生的具体代码行。

    import traceback
    
    try:
      result = 10 / 0
    except Exception as e:
      print("发生了错误!")
      traceback.print_exc()
  2. 使用调试器 (如 pdb): pdb 是 Python 的内置调试器。你可以在代码中设置断点,逐步执行代码,并检查变量的值。

    import pdb
    
    def my_function(x, y):
      pdb.set_trace()  # 设置断点
      result = x + y
      return result
    
    my_function(5, 3)
  3. 日志记录: 使用 logging 模块记录程序运行时的信息,包括错误、警告和调试信息。这可以帮助你分析错误发生的原因。

    import logging
    
    logging.basicConfig(level=logging.ERROR, filename="my_app.log")
    
    try:
      result = 10 / 0
    except Exception as e:
      logging.error(f"发生错误:{e}", exc_info=True) # 记录异常信息

如何处理多个异常?

有时候,一段代码可能引发多种类型的异常。我们可以使用多个 except 块来处理不同的异常。

try:
  user_input = input("请输入一个整数:")
  number = int(user_input)
  result = 10 / number
  print(f"结果是:{result}")
except ValueError:
  print("输入无效,请输入一个整数!")
except ZeroDivisionError:
  print("除数不能为零!")
except Exception as e:
  print(f"发生了其他错误:{e}")

这段代码首先尝试将用户输入转换为整数,然后进行除法运算。它使用 ValueError 块处理无效的输入,使用 ZeroDivisionError 块处理除数为零的情况,并使用 Exception 块处理其他类型的异常。

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

imtoken下载 im钱包 imtoken imtoken 快连官网 imtoken imtoken imtoken imtoken imtoken wallet imtoken imtoken官网 imtoken钱包 imtoken下载 imtoken官网 imtoken钱包 imtoken安卓下载 imtoken下载 imtoken官方下载 imtoken官网 imtoken安卓下载 imtoken下载 imtoken下载 imtoken imtoken imtoken imtoken imtoken imtoken imtoken imtoken imtoken bitget wallet telegram下载 quickq VPN trust wallet v2rayn imtoken