如何在异常处理后返回for循环
我准备好运行这段代码了,但在此之前我想先处理一下异常情况:
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)
....
正如这里所建议的,我加了一个try...except
,但是现在如果某个页面打不开,我就会收到这个错误:
bio = response.read()
NameError: name 'response' is not defined
这样程序就会继续执行。但我希望它能回到循环中,尝试下一个网址。我试过用break
代替pass
,但那样会结束整个程序。有没有什么建议?
3 个回答
1
你遇到这个错误是因为在抛出异常的时候,response这个变量并不存在。如果你想保持现在的代码不变,就需要在调用read之前检查一下response是否存在。
if response:
bio = response.read()
...
说到这里,我同意Mark的看法,continue
比pass
更好。
20
其实,try的功能比这要强大得多。你在这里也可以使用else块:
try:
stuff
except Exception:
print "oh no a exception"
else:
print "oh yay no exception"
finally:
print "leaving the try block"
55
用 continue
代替 break
。
pass
这个语句其实什么都不做(也就是说它没有任何作用)。程序会直接跳到下一个语句,这就是你为什么会遇到错误的原因。
break
是用来退出循环的,它会让程序从循环结束后的下一个语句开始继续执行。在这种情况下,循环后面没有其他语句,所以你的程序就结束了。
continue
会重新开始循环,但会处理下一个项目。这正是你想要的效果。