перехват NameError и обработка ошибок - PullRequest
1 голос
/ 26 февраля 2011

Я пишу функцию, которая принимает пользовательский ввод:

def func(input):

Я вставил попытку и исключения, чтобы убедиться, что ввод того типа, который я хочу. Однако, когда я помещаю в testInput, он бросает NameError против "testInput".

Я понимаю, почему, как он думает, testInput является именем переменной, тогда как он знает, что "testInput" является строкой.

Есть ли разумный способ отловить эту ошибку?

1 Ответ

5 голосов
/ 27 марта 2011

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

ВАЖНО : NameErrors обычно является признаком того, что вам необходимо исправить имена переменных / функций / классов . Использование try ... except для их отлова, как правило, является плохой практикой и приведет к запутанному и бесполезному коду.

...