我是原始的Java开发人员,对我而言,检查Java中的异常显然/容易让我决定捕获或将其抛给调用者以便以后处理。然后是Python,没有检查异常,所以从概念上讲,没有什么可以强迫你处理任何事情(根据我的经验,你甚至不知道在没有检查文档的情况下可能引发的异常)。我一直听到很多来自Python的人,在Python中,有时你最好让它在运行时失败,而不是试图处理异常。
有人可以给我一些指示:
Python异常处理的指南/最佳实践是什么?
Java和Python在这方面有什么区别?
答案 0 :(得分:1)
好的,我可以尝试给出一个我会保持中立的答案......(注意:我已经专业地做了几个月的Python,但我还远远没有完全掌握这门语言)
指南是“免费的”;如果你来自Java背景,你肯定会比大多数Python开发人员花费更多的时间来寻找关于什么时候抛出的文档的文档,并且比try
/ except
/ finally
更多在常规python代码中找到了什么。换句话说:做适合你的事。
除了可以随时抛出它们之外,Python还有多异常捕获(自7以来仅在Java中可用),with
(有点等同于Java 7的试用版) -resources),你可以拥有多个except
块(比如Java catch
不止一次)等等。另外,我不知道应该如何命名异常的真正约定,所以如果你看到SomeError
,不要被愚弄,这可能是Java开发人员认为是“已检查的例外”而不是Error
。
答案 1 :(得分:0)
我不是Python开发人员,但我在C#中做了很多工作,但也没有检查异常。作为一个Java编码器,需要一些人习惯。我个人仍然认为检查异常是一个很好的功能,但意见分歧很大(正如你在这里的一些回复中看到的那样)。
网上有很多文章说明为什么检查异常(n&#t; t)是一个好主意(有关此类意见,请参阅this blog)。
但不管您的偏好如何:Python和C#中的经验法则基本上是您已经在做的事情 - 测试运行和阅读文档。
我在C#中通常所做的事情是“全面发展”。在我的程序的根目录下的异常处理程序,它确保报告任何错误并且程序干净地退出,然后我的代码中的更深层次具有更多特定的异常处理程序,用于"已知的特定错误"。实际上,与您在Java中的工作方式没什么不同,只需要花一点时间来确定将特定处理程序放在哪里。
答案 2 :(得分:-3)
最佳做法是在适当的地方处理适当的例外情况。只有您作为开发人员才能决定代码的哪一部分应该捕获异常。通过适当的单元测试,这应该变得明显。如果您有未处理的异常,它们将显示出来。
您已经描述了这些差异。在更基础的层面上,Java的设计师认为他们比你应该如何编码知道得更好,他们会强迫你写出很多。相比之下,Python假设你是一个成年人,并且你知道自己想做什么。这意味着如果你坚持这样做,你可以用脚射击自己。