Я добавил одну строку (import pdb; pdb.set_trace()
) в HTTPlib HTTPConnection.putheader, чтобы видеть, что происходит внутри
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: 2.6.4 на win32