我试图捕捉错误60并继续执行脚本,下面是我目前正在做的事情:
import urllib2
import csv
from bs4 import BeautifulSoup
matcher = csv.reader(open('matcher.csv', "rb" ))
for i in matcher:
url = i[1]
if len(list(url)) > 0:
print url
try:
soup = BeautifulSoup(urllib2.urlopen(url,timeout=10))
except urllib2.URLError, e:
print ("There was an error: %r" % e)
它返回这个:
回溯(最后一次调用):文件“debug.py”,第13行,在urlopen return\u opener中的soup=BeautifulSoup(urlib2.urlopen(url,timeout=10))文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urlib2.py”,第126行。打开(url、数据、超时)文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py”,第400行,在open response=self中_打开(req,数据)文件“/Library/Frameworks/python2.7/Versions/lib/python2.7/urllib2.py”,第418行,在“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py”文件“/Library/Frameworks/python2.7/urllib2.py”中,第378行,在调用链结果=func(*args)文件中,第1207行,在http_open return self中。do_open(httplib.HTTPConnection,req)文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py”,第1180行,在getresponse中的do_open r=h.getresponse(buffering=True)文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py”,第1030行。begin()文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py”,第407行,在begin版本中,状态为,reason=self_read_status()文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py”,第365行,在_read_status line=self中。外交政策。readline()文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py”,第447行,在readline data=self中_短袜recv(自身尺寸)插座。超时:超时
我如何抓住这个错误并“继续”?
您可以尝试,除了例外作为e:
来捕获所有错误。但是请记住,这会捕获所有错误,如果您只想捕获特定的错误,应该避免。
编辑:您可以通过执行以下操作来检查异常类型:
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
print(exc_type, fname, exc_tb.tb_lineno)
您可以导入异常对象并修改except
块:
import socket
try:
soup = BeautifulSoup(urllib2.urlopen(url,timeout=10))
except urllib2.URLError as e:
print ("There was an error: %r" % e)
except socket.timeout as e: # <-------- this block here
print "We timed out"
更新:嗯,学到了一些新的东西——只是找到了一个对的引用。原因
属性:
except urllib2.URLError as e:
if isinstance(e.reason, socket.timeout):
pass # ignore this one
else:
# do stuff re other errors if you can...
raise # otherwise propagate the error
我无法用axios捕捉错误响应。怎么做?我用的是: 我看到ajax请求的结果有400个状态代码,响应主体看起来像(Django后端)。没关系,我已经准备好在catch处理程序中处理这些错误了。 但是它们转到成功处理程序。为何如此?我在控制台中看到以下输出: 成功处理程序接收axios错误对象作为结果。为什么会这样,下一步该怎么办?此错误对象不包含任何有用信息。 UPD。实际上,错误对象包含有用的信
我正在从后端代码发送状态代码422,其中包含错误描述的响应正文。我使用axios post发布请求,如下所示: 问题是,当后端返回错误代码422时,我捕获的错误对象没有关于响应体的信息。有什么方法可以检索错误文本吗?
我想摆脱这个错误。我读到一个类似的问题,其中一个答案建议我可以使用以下命令禁用验证: 我的确切错误是: 在C:\ path \ guzzle \ src \ Handler \ cURL factory . PHP:187堆栈跟踪:# 0 C:\ path \ guzzle \ src \ Handler \ cURL factory . PHP:187堆栈跟踪:# 0 C:\ path \ gu
所以我有一个sub-reddits列表,我用urllib打开它们。在我仔细研究之后,urllib最终失败了: 做了一些研究,我发现reddit通过IP限制了对其服务器的请求数量: 每两秒钟不要提出超过一个请求。请求的突发有一定的空间,但要保持理智。一般来说,一分钟内不要超过30个请求。 所以我想我应该使用将我的请求限制在每10秒一页。这最终也失败了。 上面的引用是从reddit API页面获取的。
是否可以使用promises的ES6语法捕获异步错误?例如,以下操作不起作用(.catch未捕获错误): 但是这个同步版本有: 使用try/catch块和清除catch中的错误是执行以下操作的唯一解决方案吗? 对于这个问题,假设抛出错误的代码部分位于另一个命名函数中,因此它没有访问函数的权限。 谢谢 编辑:这里有一个更完整的示例,说明我想在JSFIDLE中做什么。
我有一个应用程序使用了log4j1.2.17,现在我想把它更改为log4j2。所以我更改了pom.xml(我确信我已经删除了任何依赖项中的log4j1),添加了log4j2.xml。log4j2工作得很好,它记录了我想要的信息。 我查看log4j的问题。LOG4J2-2026似乎可以解决这个问题,但是我使用的log4j2版本已经是2.9.1了。我不知道是什么原因造成这个错误。