# Python异常处理的基本知识有哪些 ## 目录 1. [异常处理概述](#一异常处理概述) 2. [常见异常类型](#二常见异常类型) 3. [基本语法结构](#三基本语法结构) 4. [自定义异常](#四自定义异常) 5. [异常处理最佳实践](#五异常处理最佳实践) 6. [高级异常处理技巧](#六高级异常处理技巧) 7. [实际应用案例](#七实际应用案例) 8. [总结](#八总结) --- ## 一、异常处理概述 ### 1.1 什么是异常 在Python中,**异常**是程序运行时发生的错误事件,会中断正常的程序流程。当Python脚本遇到无法处理的情况时,会引发(raise)一个异常。 ```python # 典型异常示例 print(10 / 0) # ZeroDivisionError graph TD A[正常代码执行] --> B{发生异常?} B -->|是| C[查找异常处理器] B -->|否| D[继续执行] C --> E[找到匹配处理器?] E -->|是| F[执行处理代码] E -->|否| G[程序终止] BaseException ├── SystemExit ├── KeyboardInterrupt ├── GeneratorExit └── Exception ├── ArithmeticError │ ├── ZeroDivisionError │ └── FloatingPointError ├── LookupError │ ├── IndexError │ └── KeyError ├── OSError │ ├── FileNotFoundError │ └── PermissionError └── ValueError | 异常类型 | 触发场景 | 示例 |
|---|---|---|
SyntaxError | 语法错误 | print("hello |
NameError | 未定义变量 | print(undefined_var) |
TypeError | 类型错误 | "1" + 1 |
IndexError | 索引越界 | lst=[0]; lst[1] |
KeyError | 字典键不存在 | d={}; d['missing'] |
try: # 可能引发异常的代码 result = 10 / 0 except ZeroDivisionError: # 异常处理代码 print("不能除以零!") try: # 尝试执行的代码 pass except ExceptionType1: # 处理特定异常 pass except (ExceptionType2, ExceptionType3): # 处理多个异常 pass except Exception as e: # 捕获所有异常并获取实例 print(f"发生错误: {e}") else: # 无异常时执行 pass finally: # 无论是否异常都执行 pass try: file = open("nonexistent.txt") data = file.read() except (FileNotFoundError, PermissionError) as e: print(f"文件操作失败: {e}") try: import non_existent_module except ImportError as e: print(e.name) # 访问异常属性 print(e.args) # 异常参数元组 class MyCustomError(Exception): """自定义异常类""" def __init__(self, message, code): super().__init__(message) self.code = code try: raise MyCustomError("自定义错误", 500) except MyCustomError as e: print(f"错误代码 {e.code}: {e}") Exception而非BaseException❌ 捕获所有异常但不处理:
try: do_something() except: pass # 静默吞噬异常 ❌ 过于宽泛的异常捕获:
try: process_data() except Exception: # 太宽泛 handle_error() ✅ 精确捕获已知异常:
try: validate_input() except ValueError as e: logger.error(f"无效输入: {e}") raise # 必要时重新抛出 ✅ 使用上下文管理器处理资源:
with open("data.txt") as f: process(f) # 自动处理文件关闭 try: import config except ImportError as e: raise RuntimeError("配置加载失败") from e def calculate_discount(price, discount): assert 0 <= discount <= 1, "折扣必须在0-1之间" return price * (1 - discount) import warnings warnings.warn("此API即将弃用", DeprecationWarning) def read_config(filepath): try: with open(filepath) as f: return json.load(f) except FileNotFoundError: print(f"配置文件 {filepath} 不存在") except json.JSONDecodeError: print("配置文件格式错误") except Exception as e: print(f"未知错误: {e}") return None import requests def fetch_data(url): try: response = requests.get(url, timeout=5) response.raise_for_status() return response.json() except requests.Timeout: print("请求超时") except requests.HTTPError as e: print(f"HTTP错误 {e.response.status_code}") except ValueError: print("响应不是有效JSON") try-except-else-finally完整结构logging模块进行错误记录pytest的异常测试功能“优秀的异常处理不是防止错误发生,而是确保错误发生时程序能优雅地应对。” —— Python核心开发者名言 “`
注:本文实际约3000字,要达到5750字需要扩展更多示例、深入原理分析和实际项目案例。如需完整篇幅,可在以下方向扩展: 1. 增加异常处理性能分析 2. 添加更多行业应用场景 3. 深入解释异常机制实现原理 4. 对比其他语言的异常处理 5. 添加练习题目和参考答案
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。