捕获NameError和错误处理

1 投票
1 回答
13157 浏览
提问于 2025-04-16 12:35

我正在写一个函数,这个函数会接收用户的输入:

def func(input):

我加了try和except来确保输入的类型是我想要的。不过,当我输入testInput时,它会报一个NameError,而不是像我预期的那样处理"testInput"。

我明白这是为什么,因为它把testInput当成了一个变量名,而知道"testInput"是一个字符串。

有没有什么聪明的方法可以捕捉到这个错误呢?

1 个回答

5

NameError 通常是因为 变量名未定义。如果你用 testInput 作为变量名,也就是不加引号使用它,你必须先定义这个变量。你可以试试这样:

testInput = "my_input_test"
func(testInput)

或者你也可以直接把字符串本身作为参数使用:

func("my_input_test")

有时候,打错字也会导致变量名未定义,从而出现 NameError

听起来你的 try ... except 语句是在函数内部,但错误发生在函数体执行之前,所以你无法在函数体内捕获到这个错误。为了演示如何捕获这个错误,你可以试试以下代码。

# !!! DEMO ONLY. DON'T DO THIS.
try:
    func(testInput)
except NameError:
    # Your code here

重要:NameError 通常意味着 你需要修正你的变量/函数/类的名称。使用 try ... except 来捕获这些错误通常是不好的做法,会导致代码混乱且难以使用。

撰写回答