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

Zey*_*nel 22 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)
    ....
Run Code Online (Sandbox Code Playgroud)

正如这里建议的那样,我添加了try...except但是现在如果页面没有打开,我会收到此错误:

bio = response.read()
NameError: name 'response' is not defined
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 41

continue而不是break.

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

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

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

  • 处理异常后,它会返回到被捕获的位置,就像大多数盗贼一样. (6认同)
  • @jathanism:不,它没有.如果你没有再次"提升"它,那么它继续在`except`块之后的语句中. (2认同)

Joc*_*zel 12

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

try:
    stuff
except Exception:
    print "oh no a exception"
else:
    print "oh yay no exception"
finally:
    print "leaving the try block"
Run Code Online (Sandbox Code Playgroud)