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 会捕获 KeyboardInterruptSystemExit 等系统级异常,使程序更难停止和调试。应优先捕获你预期的具体异常。

错误 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,除非你明确要重新抛出或记录。