主要观点:
- Python 错误处理有两种主要风格“LBYL”(Look Before You Leap)和“EAFP”(Easier to Ask Forgiveness than Permission),EAFP 更优。
- 需根据错误起源(新错误或冒泡错误)和可恢复性(可恢复或不可恢复)对错误进行分类,共四种情况。
- 处理不同类型错误有不同策略,如处理新可恢复错误可自行纠正后继续;处理冒泡可恢复错误用 EAFP 捕获并恢复后继续等。
- 对于不可恢复的冒泡错误可选择不处理,让其向上冒泡到可处理的层。
- 应避免捕获所有异常,除非在顶层防止应用崩溃,大多数框架有类似处理。
- 将错误处理逻辑移到应用调用栈的高层,可使代码更易维护可读,且便于在生产和开发环境中调整错误行为。
关键信息:
- “LBYL”模式先检查条件再执行操作,易遗漏多种失败情况且存在竞态条件;“EAFP”模式先执行操作后处理错误,更优。
- 新错误是代码自身发现的问题需生成的错误,冒泡错误是调用函数时接收到的错误。
- 可恢复错误可在处理后继续,不可恢复错误无法继续需向上通知。
- 顶层应添加捕获异常的块防止应用崩溃,大多数框架有类似处理。
重要细节:
- 如删除文件的例子,用“LBYL”需检查多种可能导致删除失败的情况,代码较复杂;用“EAFP”只需在
try
块中执行删除操作,except
块处理错误。 - 对于不同类型错误的处理示例,如在
add_song_to_database
函数中处理歌曲相关的各种错误情况。 - 以 Flask 为例说明框架如何处理错误,如在
flask/app.py
中捕获所有异常。 - 展示在命令行应用中通过环境变量控制开发和生产模式下的错误处理方式。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。