我在 httplib 的 HTTPConnection.putheader 中添加了一行 ( import pdb; pdb.set_trace()
),所以我可以看到里面发生了什么。
Python26\Lib\httplib.py
,第 489 行:
def putheader(self, header, value):
"""Send a request header line to the server.
For example: h.putheader('Accept', 'text/html')
"""
import pdb; pdb.set_trace()
if self.__state != _CS_REQ_STARTED:
raise CannotSendHeader()
str = '%s: %s' % (header, value)
self._output(str)
然后从解释器运行这个
import urllib2
urllib2.urlopen('http://www.ioerror.us/ip/headers')
...正如预期的那样,PDB 开始了:
> c:\python26\lib\httplib.py(858)putheader()
-> if self.__state != _CS_REQ_STARTED:
(Pdb)
在 PDB 中,我可以动态评估表达式,因此我尝试输入 self.__state
:
(Pdb) self.__state
*** AttributeError: HTTPConnection instance has no attribute '__state'
唉,没有__state
这种情况。但是,当我进入时step
,调试器会通过
if self.__state != _CS_REQ_STARTED:
线没有问题。为什么会这样?如果self.__state
不存在,python 将不得不像我输入表达式时那样引发异常。
Python 版本:win32 上的 2.6.4