我该如何调试这个python代码?

时间:2014-02-07 20:19:53

标签: python

我正在尝试使用python wrapper发布到API。

当我从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,它只显示一个没有消息且没有args的空白BaseException。

这段代码是否会以某种方式跳过_make_request方法(这是pycharm中的步骤),或者以某种方式跳转到@retry。

我可以采取以下哪些步骤来调试它?

2 个答案:

答案 0 :(得分:1)

继续踩踏 - retry作为_make_request的包装应用,最终会调用该代码。

答案 1 :(得分:0)

装饰者包装一个功能。这意味着,当您调用具有装饰器的函数时,将调用装饰器函数。但是装饰器功能将(通常)依次调用装饰的功能。因此,您需要一直踩到retry,直到它到达调用原始函数的位。由于原始版本是装饰器的参数,因此您可能会看到类似return func(*args)或其他内容的内容。