2014-02-07 63 views
1

我試圖用一個python wrapper張貼到一個API。我該如何調試這個python代碼?

當我踏進從庫下面的代碼在pycharm

# Make the request 
    self._make_request(
     self.BASE_URI + method, 
     params.encode("utf-8"), 
    ) 

它跳到此重試方法

def retry(ExceptionToCheck, tries=3, delay=2, backoff=2): 
    """ 
    Retry decorator published by Saltry Crane. 

    http://www.saltycrane.com/blog/2009/11/trying-out-retry-decorator-python/ 
    """ 

我認爲它在_make_request跳躍,因爲下面的裝飾的有(雖然我不明白Python裝飾器):

@retry(Exception, tries=3) 
def _make_request(self, url, params=None, opener=None): 

但是,我因爲如果我在@retry中設置斷點並查看ExceptionToCheck,它只是顯示一個空白的BaseException,沒有消息,也沒有參數。

此代碼是否在某種程度上跳過_make_request方法(這是步驟到pycharm暗示)或它在某種程度上只是跳轉到@retry。

什麼是我可以調試這接下來的步驟?

回答

1

保持步進 - retry被作爲一個包裝周圍_make_request,它最終將調用的代碼。

0

裝飾器包裹的功能。這意味着,當您調用具有裝飾器的函數時,將調用裝飾器函數。但裝飾器功能將(通常)依次調用裝飾器。所以,你需要繼續穿越retry,直到你到達它調用原始函數的位置。由於原始參數是裝飾器的參數,因此您可能會看到諸如return func(*args)之類的內容。