2016-09-22 22 views
0

我从Pyhton教程手册中复制并粘贴了这些代码行。为什么当我尝试在PyCharm中运行它时,这段代码不起作用?在Python中引发我自己的异常2.7

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

这是我当我运行代码:

Pick a number: 17 
Traceback (most recent call last): 
    File "C:/Users/arman/Desktop/Scribble/Hello.py", line 153, in <module> 
    inputNumber() 
    File "C:/Users/arman/Desktop/Scribble/Hello.py", line 151, in inputNumber 
    raise 'BadNumberError', '17 is a bad number' 
TypeError: exceptions must be old-style classes or derived from BaseException, not str 
+4

该教程是*非常过时*的然后。你想选择一个不同的教程。代码在不产生弃用警告的情况下工作的最后一个Python版本是Python 2.2(2001年发布),支持从2.6(2008)完全删除。使用概念和语法的教程*远远落后于时代*也会有其他问题。找到比〜15岁更新的东西。 –

+0

另外,如果您刚刚开始使用Python,我建议您从Python 3开始,而不是2. Python 2已停止使用,2.7将仅在2020年之前收到安全修复程序。Python 3是所有能源都要去的地方至。 –

+0

我一直想学习更新的版本,但有这个机器视觉课程,我花了这个学期,需要Python 2.7编程... – Arman

回答

0

你应该引发异常的加薪如下BadNumberError('17 is a bad number')如果您已经定义BadNumberError类异常。

如果你没有,那么

class BadNumberError(Exception): 
    pass 

这里是docs与信息有关引发异常

+0

只要有这样一个异常类。那没有。 –

+0

@MartijnPieters你是完全正确的,我已经更新了答案。谢谢! –

+0

我强烈怀疑OP会发现其他问题。 Python 2.2及更早版本是迄今为止的古代历史。 –

0

Exception类就继承,那么你就可以抛出自己的异常:

class BadNumberException(Exception): 
    pass 

raise BadNumberException('17 is a bad number') 

输出:

Traceback (most recent call last): 
    File "<module1>", line 4, in <module> 
BadNumberException: 17 is a bad number 
0

如果要定义一个your own error你要做的:

class BadNumberError(Exception): 
    pass 

,然后使用它:

def inputNumber(): 
    x = input ('Pick a number: ') 
    if x == 17: 
     raise BadNumberError('17 is a bad number') 
    return x 
inputNumber() 
2

您可以使用标准的例外:

raise ValueError('17 is a bad number') 

或者你可以定义你自己的:

class BadNumberError(Exception): 
    pass 

,然后使用它:

raise BadNumberError('17 is a bad number')