关于成语:在可避免的情况下,尝试使用Python中的条款以非惯用的方式劝阻吗?

Are try except clauses idiomatically discouraged in Python when avoidable?

本问题已经有最佳答案,请猛点这里访问。

如果可以避免,并且是正常运行的代码的一部分,那么在Python中是否不鼓励使用try-except子句?例如,在下面的两个代码片段中,哪一个是首选的?

选项1:

1
2
3
4
5
6
try:
    id = list.index(42)
except:
    print("42 not found")
else:
    print("ID:", id)

选项2:

1
2
3
4
5
if 42 in list:
    id = list.index(42)
    print("ID:", id)
else:
    print("42 not found")


他们并不气馁。

然而,您的示例是愚蠢的,因为您不需要异常,例如,您可能会意外地在您的list.index代码中出现拼写错误,这将触发异常,您永远不会知道。

如果您知道要捕获什么异常,就使用异常并捕获它们——并且执行"在跳跃之前查看"检查(就像在您的示例中一样)并不容易。通常情况并非如此。然而,在您的示例中是这样的。

哦,试着避免一个覆盖的except:捕获(特别是如果你知道你如何期望你的try失败)。这很容易导致坏的做法,因为根据定义,你几乎不知道你的电话可能会做什么/提高。如果您的应用程序需要这样做(例如Paul在注释中指出的服务器示例),那就可以了,但是如果您试图在列表中查找值?那是。。。不好的。

举一个很好的例子来说明为什么这个组合不适合您的例子:

1
2
3
4
5
6
try:
    id = list.idex(42)
except:
    print("42 not found")
else:
    print("ID:", id)


一切取决于您的需求:

如果您对性能有很大的依赖性,则不鼓励使用try--except条款。

否则,可以使用try--except子句作为清晰的模式。

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