0

在下面的代码中,当我遇到异常时它会停止执行。try我怎样才能让它从异常停止的地方重新输入语句?也许我正在寻找一种不同的方法来解决这个问题,而无需使用 try-except 语句?

import requests
from requests import exceptions

contains_analyst = []

try:
    for x in data:
        r = requests.get(str(x), timeout=10, verify=False)

        if "analyst" in r.text:
            contains_analyst.append("Analyst")
            print "Analyst @ %s" % x
        else:
            contains_analyst.append("NOPERS")
            print "Nopers"

except exceptions.RequestException:
    contains_analyst.append("COULD NOT CONNECT") 
4

1 回答 1

1

您应该将 try/except 放在要捕获其错误的部分周围。在您的示例中,您似乎想要更像这样的东西:

for x in data:
    try:
        r = requests.get(str(x), timeout=10, verify=False)
    except exceptions.RequestException:
        contains_analyst.append("COULD NOT CONNECT") 
    else:
        if "analyst" in r.text:
            contains_analyst.append("Analyst")
            print "Analyst @ %s" % x
        else:
            contains_analyst.append("NOPERS")
            print "Nopers"

这里我使用块的else子句try来处理没有引发异常的情况(参见文档)。在许多情况下,如果您在异常之后不需要做任何其他事情,您可以在该点返回并将以下无异常代码放入主函数体中,从而减少缩进:

for x in data:
    try:
        r = requests.get(str(x), timeout=10, verify=False)
    except exceptions.RequestException:
        contains_analyst.append("COULD NOT CONNECT")
        return contains_analyst

    # execution reaches here if no exception
    if "analyst" in r.text:
        contains_analyst.append("Analyst")
        print "Analyst @ %s" % x
    else:
        contains_analyst.append("NOPERS")
        print "Nopers"

当然,此时返回是否有意义取决于代码的周围上下文。

于 2014-05-07T04:05:22.327 回答