《python核心编程》第十章:错误和异常1

preview
需积分: 0 0 下载量 125 浏览量 更新于2022-08-08 收藏 24KB DOCX 举报
的 `except` 来捕获所有类型的异常,但这通常不是一个好的实践,因为这样做可能会隐藏代码中的其他问题。更具体地捕获异常可以帮助我们更好地理解程序中发生了什么,并提供更精确的错误处理。 10.2 Python 中的检测和处理异常 1、`try-except`:这是最基础的异常处理结构。在 `try` 块中,你放置可能抛出异常的代码。如果在 `try` 块内发生异常,执行就会立即跳转到与之匹配的 `except` 块。例如: ```python try: # 可能抛出异常的代码 x = 1 / 0 except ZeroDivisionError: print("不能除以零!") ``` 2、`try-finally`:无论是否发生异常,`finally` 块中的代码都会被执行。这通常用于清理资源,如关闭文件或网络连接。例如: ```python try: f = open('file.txt') # 读取文件内容 except IOError: print("无法打开文件!") finally: if 'f' in locals(): # 确保只在文件已打开时关闭 f.close() ``` 3、`try-except-finally` 复合语句:结合了 `try-except` 和 `try-finally`,在处理完异常后执行 `finally` 块的代码。例如: ```python try: # 可能抛出异常的代码 x = 1 / 0 except ZeroDivisionError: print("不能除以零!") finally: print("无论是否发生异常,这行总会被执行") ``` 10.3 触发异常 你可以使用 `raise` 语句来主动触发一个异常。例如,如果你想检查一个值是否为负,你可以这样写: ```python def check_value(value): if value < 0: raise ValueError("值不能为负") ``` 10.4 上下文管理 Python 的上下文管理协议(通过 `__enter__` 和 `__exit__` 方法)使得资源的获取和释放变得简单。例如,使用 `with` 语句可以确保文件在使用后被正确关闭: ```python with open('file.txt') as f: content = f.read() # 文件在这里会被自动关闭,即使在读取过程中出现异常 ``` 10.5 断言 `assert` 语句用于在开发阶段进行条件检查。如果条件为 `False`,它会抛出 `AssertionError`。这是一种确保代码逻辑正确的有用工具: ```python assert isinstance(x, int), "x 必须是整数" ``` 10.6 标准异常 Python 提供了一系列内置的标准异常,如 `ValueError`、`TypeError`、`ImportError` 等。这些异常代表了不同类型的错误,比如类型不匹配、值错误或导入模块失败等。 10.7 创建异常 如果你需要自定义异常,你可以继承自 `Exception` 类或其子类。例如: ```python class CustomError(Exception): pass try: raise CustomError("这是一个自定义异常") except CustomError as e: print(e) ``` Python 的错误和异常处理机制提供了强大的工具来处理程序运行时可能出现的问题,帮助开发者编写健壮的代码。通过理解并熟练运用这些概念,你可以更好地调试和维护你的程序。