Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未绑定局部变量Python 3.2_Python_Try Catch - Fatal编程技术网

未绑定局部变量Python 3.2

未绑定局部变量Python 3.2,python,try-catch,Python,Try Catch,这个错误是随机出现的,我很确定这是因为infoget变量在return语句调用它之前没有初始化。让我困惑的是,代码的这一部分是如何产生错误的。希望有人能向我解释这是为什么,因为我还没有弄明白。我猜这是因为try/except语句,但我做了一些搜索并检查了手册中的7.4,并且(对我来说)没有显示我做了什么不正确的事情 breakLoop = 0 def get_item_info(linkParameters): global breakLoop nheaders = {'User

这个错误是随机出现的,我很确定这是因为infoget变量在return语句调用它之前没有初始化。让我困惑的是,代码的这一部分是如何产生错误的。希望有人能向我解释这是为什么,因为我还没有弄明白。我猜这是因为try/except语句,但我做了一些搜索并检查了手册中的7.4,并且(对我来说)没有显示我做了什么不正确的事情

breakLoop = 0
def get_item_info(linkParameters):
    global breakLoop
    nheaders = {'User-Agent' : 'Firefox/15.0.1'}
    purl = 'http://example.com/something.php'
    pd = linkParameters
    nreq = urllib.request.Request(purl, pd, nheaders)
    if breakLoop >= 4:
        return 'Request timed out {} times'.format(breakLoop)
    try:
        nresponse = urllib.request.urlopen(nreq)
    except urllib.error.URLError:
        breakLoop += 1
        get_item_info(pd)
    except urllib.error.HTTPError:
        breakLoop += 1
        get_item_info(pd)        
    else:
        infoGotten = nresponse.read()
    return infoGotten

谢谢

您需要返回递归调用的结果,因此它应该是
中的
return get\u item\u info(pd)
,除了
子句(我将其组合在下面):

递归似乎是执行重试的一种奇怪方式,为什么不使用循环呢?以下几点似乎更清楚:

def get_item_info(linkParameters):
    nheaders = {'User-Agent' : 'Firefox/15.0.1'}
    purl = 'http://example.com/something.php'
    pd = linkParameters
    for i in range(5):
        nreq = urllib.request.Request(purl, pd, nheaders)
        try:
            nresponse = urllib.request.urlopen(nreq)
            return nresponse.read()
        except (urllib.error.URLError, urllib.error.HTTPError):
            pass
    return 'Request timed out 4 times'

您需要返回递归调用的结果,因此它应该是
中的
return get\u item\u info(pd)
,除了
子句(我在下面组合了这些子句):

递归似乎是执行重试的一种奇怪方式,为什么不使用循环呢?以下几点似乎更清楚:

def get_item_info(linkParameters):
    nheaders = {'User-Agent' : 'Firefox/15.0.1'}
    purl = 'http://example.com/something.php'
    pd = linkParameters
    for i in range(5):
        nreq = urllib.request.Request(purl, pd, nheaders)
        try:
            nresponse = urllib.request.urlopen(nreq)
            return nresponse.read()
        except (urllib.error.URLError, urllib.error.HTTPError):
            pass
    return 'Request timed out 4 times'

您看到的错误是什么,您可以发布它吗?请在询问错误时显示完整的回溯。您看到的错误是什么,您可以发布它吗?请在询问错误时显示完整的回溯。我们也可以使用
,除了urllib.error.urleror和urllib.error.HTTPError
,不需要两个
,除了做相同事情的
。@AshwiniChaudhary我很确定它的拼写是
除了(urllib.error.urleror,urllib.error.HTTPError)
(不
),谢谢大家!我使用递归进行重试,只是因为我从来没有想过要做一个for循环。好吧,至少我现在知道我必须使用递归循环返回。你知道的越多@AshwiniChaudhary您的示例是偶然工作的,因为(1)
except
子句接受任何表达式,(2)异常(像大多数事情一样)计算为true,(3)
true和foo
返回
foo
,以及(4)实际引发的异常是您最后命名的异常。棘手的也许吧,但我不知道你是从哪里想到这个主意的。我所看到的所有资源都非常清楚这一点。反例:我们也可以使用
除了urllib.error.urleror和urllib.error.HTTPError
,不需要两个
除了做同样的事情。@AshwiniChaudhary我很确定它的拼写是
除了(urllib.error.urleror,urllib.error.HTTPError)
(不
),谢谢大家!我使用递归进行重试,只是因为我从来没有想过要做一个for循环。好吧,至少我现在知道我必须使用递归循环返回。你知道的越多@AshwiniChaudhary您的示例是偶然工作的,因为(1)
except
子句接受任何表达式,(2)异常(像大多数事情一样)计算为true,(3)
true和foo
返回
foo
,以及(4)实际引发的异常是您最后命名的异常。棘手的也许吧,但我不知道你是从哪里想到这个主意的。我所看到的所有资源都非常清楚这一点。反例:及