我准备运行此代码,但在我想修复异常处理之前:
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
,但结束了该计划。有什么建议吗?
答案 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
更好的建议