Python try except 用于可控的错误处理
Python try except 处理运行时错误,使程序可以用兜底值继续执行。 当解析用户输入或读取文件可能失败,但其余工作仍需继续时使用它。 关键是只包裹高风险的代码行、捕获预期异常,并提供安全默认值。
Python Try Except 示例:错误处理
输出:
输出将显示在这里...
输出:
0
示例解析
try块尝试把文本转换为整数。- 当
int()失败时,except ValueError赋予兜底值。 print在块之后执行,因此脚本始终输出可用数字。- 输出展示了兜底路径,证明错误被处理而非导致崩溃。
Python try except 常见错误
错误 1:使用裸 except 捕获所有异常。
try:
total = int(text)
except:
total = 0
try:
total = int(text)
except ValueError:
total = 0
原因:裸 except 会捕获 KeyboardInterrupt、SystemExit 等系统级异常,使程序更难停止和调试。应优先捕获你预期的具体异常。
错误 2:把太多代码放进 try,掩盖不相关的 bug。
total = 10
try:
count = int(text)
ratio = total / count
except Exception:
ratio = 0
total = 10
try:
count = int(text)
except ValueError:
ratio = 0
else:
ratio = total / count
原因:过宽的异常处理会掩盖本应暴露的错误。else 块只在没有异常时执行,因此不会吞掉意外 bug。
错误 3:把 except 从宽到窄排列。
try:
count = int(text)
except Exception:
count = 0
except ValueError:
count = 0
try:
count = int(text)
except ValueError:
count = 0
except Exception:
count = 0
原因:Python 会选择第一个匹配的处理器,宽泛异常在前会导致具体异常永远匹配不到。
性能考虑
没有异常时,try 运行高效,但抛出和捕获异常相对昂贵。如果失败是正常路径,预先检查(如输入验证)可能更快更清晰。当失败真正是例外情况时,try/except 能保持主路径简洁且性能影响很小。
何时使用 try except
- 当操作可能失败且有安全兜底值时(解析文本、读取文件或调用 API)。
- 当你想让批量处理持续进行,跳过坏数据并记录错误时。
- 保持
try足够小,只保护高风险语句,让其他错误仍然暴露。 - 避免用于“失败是常态”的场景,简单条件更便宜更清晰。
- 避免捕获
BaseException或泛化的Exception,除非你明确要重新抛出或记录。