Почему оператор исключения не выполняется при возникновении ошибки имени?

#python #exception #error-handling #nameerror

Вопрос:

После определения функции и попробуйте/except/else операторы следующим образом:

 def divide(a, b):
    try:
        a / b
    except:
        return False, 'Error occurred'
    else:
        return True, 'Division successful'
 

Исключение не возникает, если аргумент, заданный функции, является именем неопределенной переменной. Например:

 divide(2, J)
 

вместо выполнения блока кода в инструкции except отображается следующая ошибка:

 NameError: name 'J' is not defined
 

Я попытался переписать оператор except ( except NameError: ), но безрезультатно.

Я был бы признателен, если бы кто-нибудь объяснил, почему оператор except не выполняется в этом случае и как его выполнение может быть обеспечено в случае ошибки имени?

Комментарии:

1. try Блок находится внутри вашей функции; исключение возникает у вызывающего абонента при попытке оценить имя J еще до того , как ваша функция будет вызвана.

Ответ №1:

J является переменной в вашем случае, которая не определена. Еще до запуска функции J вызывается, но не существует, следовательно, ваша ошибка: имя «J» не определено. Я предполагаю, что вы хотите протестировать свою функцию, с divide(2, "J") помощью которой параметр передается в виде строки. Это должно повысить, за исключением случаев, когда это необходимо.

Комментарии:

1. На самом деле, я попытался передать строковое значение функции перед отправкой вопроса и выполнением инструкции except. Спасибо вам за ваш ответ. Теперь ясно, что код никогда не доберется до выполнения самой функции.