【问题标题】:Exception Handling guideline- Python vs Java异常处理指南 - Python vs Java
【发布时间】:2013-06-17 23:01:24
【问题描述】:

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

谁能给我一些关于以下方面的建议:

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

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

【问题讨论】:

  • 不仅没有什么可以强迫您处理任何事情,而且还可以查找有关皇家 PITA 时抛出哪些异常的文档:/
  • @fge 是的,确实,这很烦人。

标签: java python exception-handling


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • @fge,事实上,据我所知,它们在很大程度上是 Java 特有的特性。
    • 嗯,对于初学者来说,它有你的意见
    【解决方案3】:
    1. 最佳实践是在适当的位置处理适当的异常。只有您作为开发人员可以决定代码的哪一部分应该捕获异常。这应该通过体面的单元测试变得明显。如果您有未处理的异常,它们将显示出来。

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

    【讨论】:

    • 第二点是个人观点,绝非客观。
    • 不同之处不在于“Java 的设计者认为他们更了解”。已检查异常只是一种语言功能,它可以在编译时而不是在运行时通知编码人员可能会出现问题。如果您不喜欢该功能也可以,但老实说,请失去态度。
    • 我很感激 Java 和 Python 之间的中立/中间区域的答案。
    • @Shengjie 这个虚构的中性中间地带是什么?
    • @Marcin 对不起,没有。您说“Java 的设计者认为他们比您更了解”,我很抱歉,但这是一种片面的说法。你不喜欢,好吧。概括您对 Java 语言设计者的想法的不喜欢您的个人观点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多