httplib の HTTPConnection.putheader に1 行 ( 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