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

2024-09-25 02:35:10 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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,但这结束了程序。有什么建议吗?


Tags: 代码in程序urlforreadresponsepass
3条回答

使用continue而不是break

语句pass是一个no操作(意味着它什么也不做)。程序将继续执行下一个语句,这就是为什么会出现错误。

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

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

事实上,尝试比那更强大。您也可以在这里使用else块:

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

您得到的错误是因为当抛出异常时,响应变量不存在。如果要保留代码,则需要在调用read之前检查响应是否存在

if response:
    bio = response.read()
    ...

我同意马克的观点,认为continuepass更好

相关问题 更多 >