如果字符串不匹配某种格式,应该引发哪个异常?

3 投票
3 回答
4416 浏览
提问于 2025-04-16 06:15

这是对一个旧问题的后续讨论。

假设你有一个ISBN号码,比如3-528-03851-5,如果传入的字符串不符合格式X-XXX-XXXXX-X,我应该抛出什么类型的异常呢?

3 个回答

2

ValueError可能是最合适的选择。根据它的说明,这种错误发生在值的类型是对的,但值本身不合适的时候。

http://docs.python.org/library/exceptions.html#exceptions.ValueError

3

我觉得在这种情况下,可以创建一个特定的异常类来抛出,因为这是一个非常特殊的错误类型。你可以很简单地扩展(也就是继承)ValueError这个类:

class ISBNFormatException(ValueError):
    """Raised when an invalid ISBN format is found"""
    pass
6

抛出一个 ValueError

这基本上是标准的说法,意思是“你给我的值不合理”。比如:

>>> int("a")
Traceback (most recent call last):
  File "", line 1, in 
ValueError: invalid literal for int() with base 10: 'a'
>>> import shlex; shlex.split("'")
Traceback (most recent call last):
   ...
ValueError: No closing quotation

这和 TypeError 有所不同,TypeError 是在类型不正确时抛出的错误:

>>> d = {}
>>> d[{}]
Traceback (most recent call last):
  File "", line 1, in 
TypeError: unhashable type: 'dict'

撰写回答