Как вы можете это объяснить:Python не может поймать переопределены NameError
Этот код должен переопределить NameError, а затем поймать его.
OldNameError = NameError
class NameError(OldNameError):
pass
try:
ccc
except NameError as e:
print "hi"
Не печатает "привет". Вместо этого вывод:
Traceback (most recent call last):
File "try.py", line 6, in <module>
ccc
NameError: name 'ccc' is not defined
Но этот код:
OldNameError = NameError
class NameError(OldNameError):
pass
try:
raise NameError("oo")
except NameError:
print "hi"
дает выход я хотел:
hi
Что такое объяснение?
Спасибо!
Почему я не могу изменить то, что поднято? Он должен быть определен где-то, и я должен его переопределить, не так ли? –
@EllaShar: Он не определен в коде Python. Чтобы изменить его, вам нужно будет изменить сам Python iterpreter. Зачем вам это делать? – BrenBarn
Спасибо. Но что происходит, когда я пишу 'ccc', и это не определено? Как python «знает», какое исключение поднять? –