如果字符串不匹配某种格式,应该引发哪个异常?
这是对一个旧问题的后续讨论。
假设你有一个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'