은 내가보고 오늘 놀랐다 그 (파이썬 2.7.3 이상에서) 예외없이 다음 작품 :"except"에 정의되지 않은 이름이 NameError를 발생시키는 이유는 무엇입니까?
>>> try:
... pass
... except ThingThatDoesNotExist:
... print "bad"
...
>>>
나는이의 REPL에서 어떻게 유사한 NameError
를 제기해야한다고 생각했을 것이다 다음과 같을 것입니다 :
>>> x = ThingThatDoesNotExist
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'ThingThatDoesNotExist' is not defined
누구나 무슨 일이 벌어지고 있는지 알 수 있습니까?
테스트는 아무 것도 시도하지 않으므로 통과합니다. 이후부터 except 절을 실행하지 않습니다. 내가 잘못 생각할 수도 있지만, 파이썬은 평가 될 때까지 정의되지 않은 변수를 무시하지 않습니까? –
그건 정확히 여기서 일어나는 일입니다. 파이썬은 그 이름이 필요할 때까지 바운드되어 있는지 검사하지 않습니다. – geoffspear
예. 그냥'pass'를'ValueError' 또는 뭔가를 올리는 것으로 바꾸면'NameError'가 생깁니다. – kwatford