猿问

异常处理指南-Python与Java

我是原始的Java开发人员,对我而言,Java中的Exception很显然/很容易让我决定将其捕获或扔给调用方以供以后处理。然后是Python,没有检查到的异常,因此从概念上讲,没有什么可以迫使您处理任何事情(根据我的经验,如果不检查文档,您甚至不知道可能会抛出哪些异常)。我已经从Python专家那里听到很多东西,在Python中,有时最好让它在运行时失败,而不是尝试处理异常。

有人可以给我一些有关以下方面的建议吗?

  1. Python异常处理的准则/最佳实践是什么?

  2. Java和Python在这方面有何区别?


料青山看我应如是
浏览 219回答 3
3回答

阿晨1998

好的,我可以尝试给出一个尽可能保持中立的答案……(注意:我已经用几个月的时间完成了Python的专业工作,但是我还远远不能完全掌握该语言)该准则是“免费的”;如果你来自一个Java的背景,你肯定会花更多的时间比大多数的Python开发者那里寻找什么被抛出时的文件,并有更多try/ except/finally比常规Python代码中找到。换句话说:做适合自己的事。除了它们可以随时随地抛出的事实之外,Python还具有多异常捕获(仅从7开始才在Java中可用)with(某种程度上等效于Java 7的try-with-resources),您可以拥有多个except块(例如Java可以catch不止一次)等等。此外,我不知道应如何命名异常的真正约定,因此,如果您看到SomeError,不要被愚弄,这很可能是Java开发人员认为的“已检查的异常”,而不是Error。

绝地无双

我不是Python开发人员,但我在C#中做了很多工作,但C#中也没有检查异常。作为一名Java编码器,这需要一些时间来适应。我个人仍然认为检查异常是一个不错的功能,但是意见却大相径庭(正如您在此处的某些回复中所看到的)。在线上有很多文章介绍为什么检查异常不是一个好主意(有关这种观点,请参阅此博客)。但是,不管您的喜好如何:Python和C#的经验法则基本上是做您已经在做的事情-测试运行并阅读文档。我通常在C#中要做的是,在程序的根目录中有一个“全部捕获”异常处理程序,以确保报告任何错误并且程序干净退出,然后在我的代码中更深层的地方有针对“已知的特定错误”。因此,实际上,与您在Java中的工作方式没有什么不同,只是要多做一点工作才能弄清楚将特定处理程序放在哪里。

海绵宝宝撒

最佳实践是在适当的位置处理适当的异常。作为开发人员,只有您自己可以决定代码的哪一部分应该捕获异常。随着体面的单元测试,这应该变得显而易见。如果您有未处理的异常,它们将会出现。您已经描述了差异。从根本上讲,Java的设计师认为他们比您更了解应该如何编码,并且会迫使您编写大量代码。相比之下,Python假设您是成年人,并且您知道自己想做什么。这意味着您可以坚持射击自己。
随时随地看视频慕课网APP

相关分类

Python
我要回答