关于异常:python:我应该使用ValueError还是创建自己的子类来处理无效的字符串?

python: Should I use ValueError or create my own subclass to handle invalid strings?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Which exception should I raise on bad/illegal argument combinations in Python?

我已经查看了Python内置的异常,唯一看起来很接近的是ValueError。

从python文档:

exception ValueError:
Raised when a built-in operation or function receives an argument that has the right type but an inappropriate value, and the situation is not described by a more precise exception such as IndexError.

我应该创建ValueError的子类吗,比如InvalidFormatException?

(我的特殊情况是,如果罗马数字字符串格式不正确,但还有许多其他适用的情况。)

编辑:看起来ValueError是正确的选择,现在的问题是直接使用ValueError还是将其子类化。


ValueError与你的情况很匹配。继续这样做,记住您可以指定一条有用的消息作为参数,让您将其与其他类型的ValueError区分开来。

但是,通过定义子类,我不会使代码变得更复杂,除非我有充分的理由只想捕获那个特定的错误,但避免捕获任何其他ValueErrors。许多应用程序都有许多"特殊"的错误条件,但是如果它们还定义了每种情况的子类,代码将很快变得不可维护,任何试图使用这些例程的人都会不断地被意外的新异常所震惊。


ValueError似乎合乎逻辑:

1
2
3
4
5
6
7
In [1]: int('abc')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)

<ipython console> in <module>()

ValueError: invalid literal for int() with base 10: 'abc'


实际上,这取决于您是否希望(或需要)可以独立于调用代码期间可能发生的其他ValueError来捕获特定的异常。它还取决于您是代码的唯一使用者还是其他人要使用的代码;在后一种情况下,如果您定义了一些高级库特定的异常,它们可以检查这些异常,这可能会对这些人有所帮助。


我投票赞成创建一个唯一的子类,InvalidFormatException。

ValueError虽然是真的,但却是模糊的。

SuffiDimeFATExtExchange更具体,并直接绑定到您的问题。

用户可能会遇到这样的情况:他们所做的事情可能会导致两种错误。他们可以转换罗马数字,然后做一些数学运算。它们可能需要区分ValueError和InvalidFormatException。


我也支持这个案例的ValueError。我的2美分。


对。;-)ValueError听起来像是最适用于内置的,并且有一个子类,您似乎在尽可能做到最好。这也是联邦调查局'%q' % 1将要提高的。