【问题标题】:Python: is RuntimeError acceptable for general use?Python:RuntimeError 是否可用于一般用途?
【发布时间】:2015-06-24 19:53:41
【问题描述】:

是否可以将 RuntimeError 异常用于一般应用程序?

raise RuntimeError('config file is missing host address')

我有一些代码包含一些类似这样的一次性情况,并且希望避免为每个情况创建一次性异常类。所有情况都是致命的,我的目标是向控制台发出明确的消息。基本上我正在寻找类似于已弃用的东西

raise 'config file is missing host address'

【问题讨论】:

    标签: python exception


    【解决方案1】:

    这是...好的。理想情况下,您应该对每种合理不同的情况都有单独的例外(例如,所有“配置文件格式错误”错误的一个例外,在 3.x 中重用 FileNotFoundError 以表示“配置文件没有存在”等)。但这是比较无害的技术债务形式之一。

    缺点是,如果您确实引入了这些单独的异常,出于向后兼容性的原因,它们可能需要从 RuntimeError 继承。这有点丑陋,但大多是无害的。

    【讨论】:

    • 相反,我会说许多异常类无论如何都会合理地派生自RuntimeErrorRuntimeError 仅表示某些错误只能在运行时检测到,而不是在软件设计时检测到: 出自开发者之手的错误。这与 TypeError 形成鲜明对比,在仔细分析程序流程后,您应该能够看到您实际上不恰当地使用了一个类型。
    • @burnpanck: OSError 及其朋友不是从RuntimeError 派生的。 ValueErrorKeyError 等也没有,但这些都是合理可能的运行时错误。 RuntimeError 在很大程度上是一个“杂项”垃圾箱,我不喜欢扩展它。
    • 是的,我想无论如何在运行前是否可以合理检测到某些东西并不总是很清楚。在实践中,它似乎并不重要(至少在我的用例中),因为要么你期望一些非常具体的东西,要么你有 except Exception:,或者你反正只看回溯。
    • @burnpanck except Exception?当然只是except
    • @ArtemisFowl: Don't use bare except:.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 2013-06-28
    • 1970-01-01
    相关资源
    最近更新 更多