【发布时间】:2016-11-03 17:49:08
【问题描述】:
我在 Python 中处理异常时遇到了一些问题。在许多情况下,我希望忽略所有异常的代码区域。假设我有 100 行代码希望发生这种情况。
这是大多数人认为的解决方案:
try:
line 1
line 2
line 3
...
line 99
line 100
except:
pass
这实际上不适用于我的情况(以及许多其他情况)。假设第 3 行有一个异常。一旦抛出异常,它直接“通过”,并跳过第 4-100 行。我能想出的唯一解决方案是:
try:
line 1
except:
pass
try:
line 2
except:
pass
try:
line 3
except:
pass
...
try:
line 99
except:
pass
try:
line 100
except:
pass
但是,很明显,这非常丑陋、草率,而且绝对需要永远。如何以更短、更简洁的方式完成上述代码?如果您提供允许将“通过”替换为其他代码的方法,则会获得奖励积分。
【问题讨论】:
-
听起来您需要对代码进行一些认真的重新设计。你真的有 100 行完全独立的代码,它们完全不相互依赖,不能放在一个循环中,所有代码都可能以你的代码可以从中恢复的方式失败吗?
-
如果你在做测试,你真的应该有增量测试......所以例如......如果工作流程是a->b->c,做c,它需要先做 a->b.... 所以如果 a 或 b 失败,就没有理由测试 c。
-
我实际上没有 100 行,但有时我有 6 或 7 行。哪怕只有6、7个,还是很草率的。
-
是的,在好的代码中,您应该只捕获您期望的异常,这意味着您应该确定要捕获的异常。以您的错误代码可以工作的方式捕获异常将是一个非常非常糟糕的主意。抓东西,例如将字符串转换为整数,但字符串无法转换,因为它不代表数字。
-
但是,这些真的是完全独立的吗?比如,如果其中任何一个失败了,你的程序就完全没问题了吗?你不能把它们放在一个循环中吗?
标签: python python-2.7 exception