【问题标题】:Problems with exceptions异常问题
【发布时间】:2022-12-06 07:41:25
【问题描述】:

我正在尝试对 Python 进行练习。为此,我必须使用以下功能:

def getNumber() :
    x = input ('Choose a number: ')
    if x != 17:      
        raise ("ErrorBadNumber","17 is a bad number")
    return x

练习说创建另一个使用getNumber 的函数并处理异常ErrorBadNumber

我创建了函数getNumber_2 来尝试解决这个问题:

def getNumber() :
    x = input ('Choose a number: ')
    if x != 17:      
        raise ("ErrorBadNumber","17 is a bad number")
    return x

while True:

    def getNumber_2 ():
        try:
            getNumber ()
        except ErrorBadNumber:
            print('Write another number, please')
            getNumber ()

然后,出现错误:“未定义的名称‘ErrorBadNumber’”。无论如何,当我只执行函数getNumber时,异常不会发生。我不知道为什么。提前致谢。

【问题讨论】:

  • 你为什么要在无限循环中定义一个新函数getNumber_2()
  • 第一个功能是按原样提供给您的,还是您的代码?这不是 raise an exception 的有效方式。 raise 的参数必须是异常实例或异常类。您正在提供一个元组。
  • 这里有几个问题。首先,检查格式、缩进问题。接下来,这段代码永远不会调用getNumber_2()。然后,raise 的语法是raise [Exception] 而不是raise [tuple[str]]。最后,ErrorBadNumber 从未被定义。

标签: python


【解决方案1】:

异常必须是从基异常类派生的类。在你的 while 循环中,你正在定义一个函数,但你从不调用该函数,所以没有任何东西运行。这是一个无限循环,什么都不做。

例如:

class ErrorBadNumber(Exception):
    pass

def getNumber() :
    x = input ('Choose a number: ')
    if x != '17':      
        raise ErrorBadNumber("17 is a bad number")
    return x

while True:
    try:
        getNumber ()
        break
    except ErrorBadNumber:
        print('Write another number, please')

【讨论】:

    猜你喜欢
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    • 2016-06-27
    相关资源
    最近更新 更多