2010-03-14 53 views
0

我在httplib的HTTPConnection.putheader中添加了一行(import pdb; pdb.set_trace()),所以我可以看到里面发生了什么。Python:令人费解的httplib行为

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

回答

0

如果自.__状态不存在巨蟒本来因为它没有当我输入的表达式时抛出异常。

在Python中,您不必显式声明变量。 当你分配给他们时,他们是“天生的”。

像pylint这样的代码验证程序会警告这些情况。 在你的情况下,你可能有类似self.__state = NoneHTTPConnection.__init__()

但这不是很重要。

+0

对不起,你似乎不明白这个问题。 httplib如何在不引发异常的情况下引用一个不存在的变量? – Anna 2010-03-14 11:09:32