Проблема в том, что это не так, как исключения возникают в Python. . Вы raise
объект, который является производным от BaseException
(как правило, это происходит от одного из built-in exception types Итак, ваш пример будет переоборудован так:
class BadNumberError(ValueError):
pass
def inputnumber():
x = input('Pick a number: ')
if x == 17:
raise BadNumberError('17 is a bad number')
return x
Результаты деятельности являются:
[/home/.../Python/demos]$ python2.7 exception_demo.py
Pick a number: 17
Traceback (most recent call last):
File "exception_demo.py", line 11, in <module>
print(inputnumber())
File "exception_demo.py", line 7, in inputnumber
raise BadNumberError('17 is a bad number')
__main__.BadNumberError: 17 is a bad number
[/home/.../Python/demos]$ python2.7 exception_demo.py
Pick a number: 18
18
Одно отметить, что это чрезвычайно общий, чтобы видеть людей, просто используя экземпляры встроенных типов исключений напрямую, например:
def inputnumber():
x = input('Pick a number: ')
if x == 17:
raise ValueError('17 is a bad number')
return x
Это, по-видимому, более удобно, хотя мне лично это не нравится, поскольку это затрудняет улов исключений, вызванных конкретными условиями.