#python #nameerror
#python #ошибка имени
Вопрос:
def strornum(a):
try:
return(a/1)
except Exception:
return("ERROR")
bob=strornum("W")
print(bob)
Это дает мне правильную ошибку «ОШИБКА»
def strornum(a):
try:
return(a/1)
except Exception:
return("ERROR")
bob=strornum(W)
print(bob)
Это не обрабатывается и выдает мне «ошибка имени: имя ‘W’ не определено»
Мне нужно зафиксировать эту ошибку
Есть идеи?
Комментарии:
1. Вокруг использования нет try / except
W
, просто поместитеbob=strornum(W)
его, но это бессмысленно, потому что переменная определяется или нет при написании скрипта, за исключением случаев, когда переменная определена вif
блоке <<== в этом случае возникает ошибка в else . Не используйте NameError для выполнения кода2. Или объясните, почему вы считаете, что вам нужно это уловить
3. Ошибка возникает перед вызовом функции. Как a
try
внутри функции может ее перехватить?4.
"W"
означает односимвольную строку, которая имеет aW
для своего единственного символа.W
означает переменную с именемW
, которая, очевидно, не определена. Не должно быть необходимости перехватывать ошибки имени, потому что вы уже должны знать, какие имена определены в вашем коде, когда вы его кодируете.5. @PranavHosangadi Он это знает. Он просто хочет, чтобы он
try/except
перехватил ошибку из неопределенной переменной.
Ответ №1:
То, что вы хотите, невозможно.
При вызове функции все аргументы вычисляются до выполнения кода в функции. Python не ждет, пока вы не обратитесь к переменной параметра внутри функции (есть некоторые языки, которые это делают, это называется «отложенная оценка»).
Таким образом, ошибка возникает в вызывающем коде перед вводом вашего try/except
блока, поэтому он не может ее там перехватить.
Ответ №2:
Запуск кода с ошибкой выдает сообщение об обратном отслеживании
Traceback (most recent call last):
File "test.py", line 7, in <module>
bob=strornum(W)
NameError: name 'W' is not defined
Ошибка возникла при попытке вызвать функцию, а не в самой функции. W
не определено в точке вызова. Решение состоит в том, чтобы добавить другой обработчик исключений на этом уровне.
def strornum(a):
try:
return(a/1)
except Exception:
return("ERROR")
try:
bob=strornum(W)
print(bob)
except Exception:
print("Outer Error")
обязательное предупреждение: перехват всех исключений обычно не является хорошей идеей, поскольку это может замаскировать реальные проблемы с вашим кодом.