dzisiaj byłem zaskoczony, aby zobaczyć, że następujące prace bez wyjątków (w Pythonie 2.7.3 co najmniej):Dlaczego nieokreślona nazwa w "except" nie wywołuje NameError?
>>> try:
... pass
... except ThingThatDoesNotExist:
... print "bad"
...
>>>
myślałem, że powinno to podnieść NameError
w REPL, podobnie jak w następstwie:
>>> x = ThingThatDoesNotExist
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'ThingThatDoesNotExist' is not defined
Ktoś ma pojęcie, co się tutaj dzieje?
Twój test niczego nie próbuje i dlatego przechodzi. Ponieważ tak jest, nigdy nie działa poza klauzulą except. Mogę się mylić, ale czy Python nie ignoruje niezdefiniowanych zmiennych, dopóki nie zostaną one ocenione? –
Dokładnie to się tutaj dzieje. Python nie sprawdza, czy ta nazwa jest powiązana z niczym, dopóki nie będzie potrzebna. – geoffspear
Yup. Po prostu zmień 'pass' na' raise ValueError' lub coś takiego, a otrzymasz "NameError". – kwatford