如何在异常处理后返回for循环

时间:2009-12-03 22:59:54

标签: python exception-handling

我准备运行此代码,但在我想修复异常处理之前:

for l in bios:
    OpenThisLink = url + l
    try:
        response = urllib2.urlopen(OpenThisLink)
    except urllib2.HTTPError:
        pass
    bio = response.read()
    item = re.search('(JD)(.*?)(\d+)', bio)
    ....

根据建议here,我添加了try...except,但现在如果页面未打开,我会收到此错误:

bio = response.read()
NameError: name 'response' is not defined

所以程序继续执行。相反,我希望它回到for循环并尝试下一个url。我尝试了break而不是pass,但结束了该计划。有什么建议吗?

3 个答案:

答案 0 :(得分:37)

使用continue代替break

声明pass是一个无操作(意味着它没有做任何事情)。程序只是继续下一个语句,这就是你得到错误的原因。

break退出循环,并在循环后立即从下一个语句继续运行。在这种情况下,没有更多的语句,这就是你的程序终止的原因。

continue重新启动循环但是使用下一个项目。这正是你想要的。

答案 1 :(得分:12)

尝试实际上比这更强大。你也可以在这里使用else块:

try:
    stuff
except Exception:
    print "oh no a exception"
else:
    print "oh yay no exception"
finally:
    print "leaving the try block"

答案 2 :(得分:1)

您收到该错误,因为抛出异常时,响应变量不存在。如果您想保留代码的方式,则需要在调用read

之前检查响应是否存在
if response:
    bio = response.read()
    ...

说过我同意马克认为continue是一个比pass更好的建议