Python函数即使处理异常也会不断返回namererror

2024-10-01 17:37:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个处理整数的函数。我添加了一些代码,用于在输入字符串或float时进行异常处理,但是Python总是返回无意义或NameError。在这一点上,我尝试了一个循环,它不断地询问直到输入一个整数和一个tryexcept。什么都不管用。你知道吗

代码如下:

def threes(num):

    """isNotCorrect = True

    while isNotCorrect:
        print(type(num))
        if type(num) is not int:
            print("Sorry, you need to enter a whole number to play Threes.")
        else:
            print('X')
            isNotCorrect = False"""

    try:
        while num > 1:
            if num % 3 == 0:
                num = num/3
            else:
                if ((num + 1) % 3 == 0):
                    num = (num + 1)/3
                else:
                    num = (num - 1)/3
            print(num)
    except NameError:
        print("Invalid number. Please enter a valid number.")

输入一个整数(预期的输入)可以很好地执行代码,但其他所有操作都会导致这样的名称错误,其中输入是threes(bob)。最上面的部分是我对循环的尝试,它也失败了并返回了相同的错误

Traceback (most recent call last):
   File "<input>", line 1, in <module>
NameError: name 'bob' is not defined

Tags: 代码numberifistype整数elsenum
3条回答

您的bob变量根本没有定义,因此无法到达try/catch。你知道吗

尝试用非数字标记bob,bob = 'test_string',然后重试。你知道吗

NameError: name 'bob' is not defined表示您试图使用名为bob的变量,但您没有创建它。
您必须定义什么是bob,例如:
bob = 'a simple man' # bob is a string

bob = 4 # bob is an integer

此外,我只想让您知道,即使它有效,也要尽量避免使用try/except,因为当您必须进入except块时,这相当慢。你知道吗

如果要检查变量是否为整数,建议使用:

if isinstance(bob, int):
    # do something
else:
    # do something else

其中isinstance()是一个内置函数。你知道吗

问题是NameError是从函数调用的外部引发的。当你说:

threes(bob)

Python所做的是:

  1. 获取bob的值。你知道吗
  2. 调用threes,将该值作为参数传递。你知道吗

NameError是在步骤1中提出的,因此您甚至不需要进入函数。如果仍要捕获它,则应将try/except块放在外部:

try:
    threes(bob)
except NameError:
    print("NameError raised.")

相关问题 更多 >

    热门问题