2010-03-14 59 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