У меня есть довольно хорошее представление о предложении python-исключая
Нет. Ну, может быть, у вас есть, но тогда вам не хватает других, гораздо более важных областей. Либо вы ожидаете магического расширения области действия (каламбур не предназначен), либо вы не понимаете, в каком коде заказа оценивается ... Я предполагаю последнее. tryAppend(foo, var1)
оценивается (приблизительно) в следующем порядке:
- Получить объект
tryAppend
ссылки
- Выбрать объект
foo
Ссылки
- Выбрать объект
var1
Ссылки
- Вызовите первый со вторым и третьим аргументами (= делайте то, что делает функция
tryAppend
, исключая попытку-исключения)
Ошибка возникает в # 2, задолго до ввода функции и блока try. На самом деле, блок try не может выдать ошибку NameError, поскольку используются только имена parent
и child
, оба являются аргументами и, следовательно, всегда доступны (если .append
не существует, это AttributeError
).
Вы спрашиваете, почему
raise Exception("Catch me if you can")
try:
pass # do nothing
except:
print "caught it"
не печатает "поймал".