Python 中的名称错误处理

NameError Handling in Python

我是 python 的新手,我很难理解为什么 {try...except} 与以下代码配合得很好:

try:
   print(x)
except NameError:
   print('variable x is not defined')

但它不适用于以下代码:

def divide(x, y):
    try:
        result = x / y
    except (ZeroDivisionError, NameError):
        print("division by zero!")
    except NameError:
        print('only numeric values')
    else:
        return result
        # print("result is", result)

print(divide(4,f))

有点难看(你应该修复代码部分的格式):

在第二个示例中,名称错误将出现在调用除法函数的行中,该行位于任何异常处理程序之外。

您的代码中几乎没有问题。

照原样,NameError 将由以下人员提出:

print(divide(4,f))

因为没有f.

您必须在出现异常的地方处理异常,即:

try:
    print(divide(4,f))
except NameError:
    print('variable f is not defined')

现在,当您查看函数本身时,这一行:

except (ZeroDivisionError, NameError):

表示在引发 ZeroDivisionError NameError 时执行以下块。所以如下:

except NameError:

从来没有玩过。该消息有点暗示您可能正在寻找类似 TypeError 的内容。例如。当你想要一个数字,但得到了一个 str.

NameError 本质上意味着变量未定义,你永远不会(好的,除非你 del 它)看到它在函数中访问 xy接受这两个作为参数。您可以看到 TypeError 在没有预期位置参数的情况下调用它,但在该函数中 xy 将在那里。