为什么"except"中的未定义名称没有引发NameError?

dcr*_*sta 5 python

今天我很惊讶地看到以下工作没有例外(至少在Python 2.7.3中):

>>> try:
...     pass
... except ThingThatDoesNotExist:
...     print "bad"
...
>>>
Run Code Online (Sandbox Code Playgroud)

我本以为这应该NameError在REPL中引发一个,类似于以下内容:

>>> x = ThingThatDoesNotExist
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'ThingThatDoesNotExist' is not defined
Run Code Online (Sandbox Code Playgroud)

任何人都知道这里发生了什么?

Joc*_*zel 4

出于同样的原因,这不会引发异常:

>>> True or ThingThatDoesNotExist
Run Code Online (Sandbox Code Playgroud)

Python 在需要计算名称时准确地查找名称。不需要评估的名称不会被查找,并且查找失败会引发异常。