2016-01-26 3 views
-1

следующий код в питоне 2.7.10python2.7 - TypeError: исключения должны быть классами старого стиля или производные от BaseException, не ул

def inputnumber() : 
    x = input('pick a number : ') 
    if x == 17 : 
     raise 'BadNumberError' , '17 is a bad number' 
    return x 

и когда я запускаю это, он дает мне TypeError:

TypeError: исключения должны быть классы старого стиля или производный от BaseException, не ул

ответ

0

Проблема в том, что это не так, как исключения возникают в 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 

Это, по-видимому, более удобно, хотя мне лично это не нравится, поскольку это затрудняет улов исключений, вызванных конкретными условиями.

 Смежные вопросы

  • Нет связанных вопросов^_^