在可避免的情况下尝试在Python中以惯用方式禁止使用除了子句吗?

时间:2016-03-10 02:04:42

标签: python idioms idiomatic try-except

如果可以避免使用Python中的try except子句并且它是正常运行的代码片段的一部分吗?例如,在以下两个代码片段中,首选?

选项1:

try:
    id = list.index(42)
except:
    print("42 not found")
else:
    print("ID: ", id)

选项2:

if 42 in list:
    id = list.index(42)
    print("ID: ", id)
else:
    print("42 not found")

2 个答案:

答案 0 :(得分:2)

他们并不气馁。

但是,你的例子很愚蠢,因为你没有需要例外,你可能会在你的list.index代码中意外地发生拼写错误,这会触发你的异常,你永远不会知道。

如果您知道正在捕捉的异常,请使用例外和捕捉 - 并且在您跳跃之前先了解一下"检查(就像在你的例子中)。通常情况不会如此。但是,在你的例子中它是。

哦,并尝试避免一揽子except:抓住(特别是如果你知道 你期望你的try失败)。这可以很容易地实现糟糕的练习,因为你几乎不知道你的电话会做什么/提出什么。如果您的应用程序需要这个(例如Paul在评论中指出的服务器示例),那很好,但是如果您尝试在列表中查找值?那是......不好。

作为一个很好的例子,说明为什么这个例子并不适合你的例子:

try:
    id = list.idex(42)
except:
    print("42 not found")
else:
    print("ID: ", id)

答案 1 :(得分:0)

一切都取决于您的需求:

如果您对效果有很大的依赖性,则不鼓励in FormViewB in FormViewA - try条款。

否则,您可以使用except - try子句作为明确的模式。

无论如何,在您的示例中,我认为except - if代码比else - try代码更清晰。