在下面的代码中,当我遇到异常时它会停止执行。如何让它重新输入异常停止的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")
答案 0 :(得分: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
子句来处理没有引发异常的情况(参见documentation)。在许多情况下,如果您在异常之后不需要做任何其他事情,那么您可以在此时返回并将以下无异常代码放在主函数体中,从而减少缩进:
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"
当然,在这一点返回是否有意义取决于代码的周围环境。