python2.7 - TypeError:exception必须是旧式类或派生自BaseException,而不是str

时间:2016-01-26 19:40:02

标签: python typeerror raise

以下python 2.7.10中的代码

{{1}}

当我运行它时,它会给我TypeError:

TypeError:异常必须是旧式类或派生自BaseException,而不是str

1 个答案:

答案 0 :(得分: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
它可能更方便,但我个人并不喜欢它,因为它很难捕捉到由特定条件引起的异常。