9

我是原始的 Java 开发人员,对我来说,检查 Java 中的异常显然/很容易让我决定捕获或将其扔给调用者以便稍后处理。然后是 Python,没有检查的异常,所以从概念上讲,没有什么能强迫你处理任何事情(根据我的经验,如果不检查文档,你甚至不知道可能会引发哪些异常)。我从 Python 人那里听到了很多,在 Python 中,有时你最好让它在运行时失败,而不是尝试处理异常。

有人可以给我一些关于:

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

  2. 在这方面,Java 和 Python 有什么区别?

4

3 回答 3

2

好的,我可以尝试给出一个我会尽可能保持中立的答案......(注意:我已经专业地做了几个月的 Python,但我远未完全掌握这门语言)

  1. 指南是“免费的”;如果您来自 Java 背景,那么您肯定会比大多数 Python 开发人员花费更多的时间来寻找有关何时抛出的文档,并且比常规 Python 代码中找到的内容更多try// 。换句话说:做适合你的事。exceptfinally

  2. 除了它们可以在任何时候被抛出之外,Python 还具有多异常捕获(仅在 Java 7 之后可用),with(有点相当于 Java 7 的 try-with-resources),您可以拥有多个except块(就像 Java 可以catch不止一次)等等。此外,我不知道应该如何命名异常的真正约定,所以如果你看到了,请不要被愚弄SomeError,这很可能是 Java 开发人员认为的“检查的异常”而不是Error.

于 2013-06-17T23:45:41.497 回答
0

我不是 Python 开发人员,但我在 C# 中做了很多工作,它也没有检查异常。作为一个需要一些时间来适应的 Java 编码器。我个人仍然认为检查异常是一个不错的功能,但意见分歧很大(正如您在此处的一些回复中看到的那样)。

网上有很多关于为什么检查异常是(不是)好主意的文章(请参阅此博客以获得这样的观点)。

但不管你的偏好如何:Python 和 C# 的经验法则是基本上做你已经在做的事情——测试运行和阅读文档。

我通常在 C# 中做的是在我的程序的根目录有一个“包罗万象”的异常处理程序,以确保报告任何错误并且程序干净地退出,然后在我的代码中更深入地为“已知的特定错误”。所以实际上,与您在 Java 中的工作方式并没有太大的不同,只是需要多做一些工作来确定将您的特定处理程序放在哪里。

于 2013-06-17T23:37:50.630 回答
-3
  1. 最佳实践是在适当的地方处理适当的异常。只有您作为开发人员可以决定代码的哪一部分应该捕获异常。这应该通过体面的单元测试变得明显。如果您有未处理的异常,它们将显示出来。

  2. 您已经描述了差异。在更基础的层面上,Java 的设计者认为他们比您更了解您应该如何编码,并且他们会强迫您编写大量代码。相比之下,Python 假设您是成年人,并且您知道自己想做什么。这意味着如果你坚持这样做,你可能会在自己的脚下开枪。

于 2013-06-17T23:15:51.820 回答