- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这是一段网络挖掘脚本。
def printer(q,missing):
while 1:
tmpurl=q.get()
try:
image=urllib2.urlopen(tmpurl).read()
except httplib.HTTPException:
missing.put(tmpurl)
continue
wf=open(tmpurl[-35:]+".jpg","wb")
wf.write(image)
wf.close()
q
是一个由 Urls 组成的 Queue()
,`missing 是一个空队列来收集 error-raising-urls
它由 10 个线程并行运行。
每次我运行这个,我都会得到这个。
File "C:\Python27\lib\socket.py", line 351, in read
data = self._sock.recv(rbufsize)
File "C:\Python27\lib\httplib.py", line 541, in read
return self._read_chunked(amt)
File "C:\Python27\lib\httplib.py", line 592, in _read_chunked
value.append(self._safe_read(amt))
File "C:\Python27\lib\httplib.py", line 649, in _safe_read
raise IncompleteRead(''.join(s), amt)
IncompleteRead: IncompleteRead(5274 bytes read, 2918 more expected)
但我确实使用了except
...我尝试了其他类似的东西
httplib.IncompleteRead
urllib2.URLError
甚至,
image=urllib2.urlopen(tmpurl,timeout=999999).read()
但这些都不起作用..
如何捕获 IncompleteRead
和 URLError
?
最佳答案
我认为这个问题的正确答案取决于您认为什么是“引发错误的 URL”。
如果您认为任何引发异常的 URL 都应该添加到 missing
队列中,那么您可以这样做:
try:
image=urllib2.urlopen(tmpurl).read()
except (httplib.HTTPException, httplib.IncompleteRead, urllib2.URLError):
missing.put(tmpurl)
continue
这将捕获这三个异常中的任何一个并将该 url 添加到 missing
队列中。你可以更简单地做:
try:
image=urllib2.urlopen(tmpurl).read()
except:
missing.put(tmpurl)
continue
捕获任何异常,但这不被认为是 Pythonic 的,并且可能隐藏代码中的其他可能错误。
如果“引发错误的 URL”是指引发 httplib.HTTPException
错误的任何 URL,但如果收到其他错误,您仍希望继续处理,那么您可以执行以下操作:
try:
image=urllib2.urlopen(tmpurl).read()
except httplib.HTTPException:
missing.put(tmpurl)
continue
except (httplib.IncompleteRead, urllib2.URLError):
continue
这只会在引发 httplib.HTTPException
时将 URL 添加到 missing
队列,否则会捕获 httplib.IncompleteRead
和 urllib.URLError
并防止脚本崩溃。
顺便说一句,while 1
循环总是让我有点担心。您应该能够使用以下模式循环遍历队列内容,但您可以自由地继续按照自己的方式进行:
for tmpurl in iter(q, "STOP"):
# rest of your code goes here
pass
另外,除非绝对必要,否则您应该使用 context managers打开和修改文件。所以你的三个文件操作行将变成:
with open(tmpurl[-35:]+".jpg","wb") as wf:
wf.write()
上下文管理器负责关闭文件,即使在写入文件时发生异常也会这样做。
关于python - 处理 IncompleteRead,URLError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11929095/
我想编写一个程序来从 Twitter 获取推文,然后进行情感分析。我编写了以下代码,即使在导入所有必要的库后也出现错误。我对数据科学比较陌生,所以请帮助我。 我无法理解此错误的原因: class Tw
我正在使用 Tweepy 在 Python3 中编写一个 Twitter 流监听器。流式传输一段时间后出现此错误: urllib3.exceptions.ProtocolError: ('Connec
当我尝试使用 requests 下载一些图像时遇到了这个奇怪的错误,代码如下, import requests import StringIO r = requests.get(image_url,
这是一段网络挖掘脚本。 def printer(q,missing): while 1: tmpurl=q.get() try: ima
我正在尝试从网站获取一些数据。但是它返回给我incomplete read。我要获取的数据是大量嵌套链接。我在网上做了一些研究,发现这可能是由于服务器错误(之前完成的分 block 传输编码达到预期大
这个问题似乎以前已经得到解答,但似乎只发生在 Linux 上。 我对文件的唯一导入是 import http.client ,完整错误如下: Error: An error occurred whi
我正在用 python 为 bigcommerce 构建一个应用程序,使用 bigcommerce sdk ( https://github.com/bigcommerce/bigcommerce-a
我已经阅读了许多有关“IncompleteRead”的问题和答案,其中大多数(如果不是全部)最终都会建议卸载并重新安装 pip,或升级 pip,或卸载并重新安装您尝试安装的软件包. 我什至无法升级 p
通过 pip3 安装模块时遇到问题,尝试了 2014 年 12 月投票最高的线程中的几个建议,但仍然得到以下信息: sudo pip3 install send2trash Traceback
我有几个守护进程使用 boto 从 Amazon S3 读取许多文件。每隔几天,我就会遇到一种情况,即 httplib.IncompleteRead 从 boto 的深处被抛出。如果我尝试重试该请求,
当我尝试使用 pip 或 pip3 安装任何东西时,我得到: $ sudo pip3 install python3-tk Traceback (most recent call last): F
我正在尝试使用 beautifulsoup4 和 python3 来抓取 really long web page。由于网站的大小,当我尝试在网站中搜索某些内容时,http.client 会抛出错误:
我试图了解如何处理下面代码中的 http.client.IncompleteRead 错误。我使用 this post 中的想法处理错误.基本上,我认为这可能只是服务器限制了我可以访问数据的次数,但奇
在运行此程序以使用 Python 2.7.8 检索 Twitter 数据时: #imports from tweepy import Stream from tweepy import OAuthHa
使用 Airflow worker 和 webserver/scheduler 作为在 EC2 上的 Kubernetes Engine 上运行的 Docker 镜像 我们有一个包含 Kubernet
我正在使用 Python (2.7.6) 和 Py2Neo (1.6.4) 更新 Neo4j 服务器上的数据。我的加载函数是: from py2neo import neo4j,node, rel,
我正在尝试使用请求模块下载 PDF 文件,代码如下: import requests url = "" r = requests.get(url, stream=True, timeout=(60,
我的 Python 脚本,包含以下行: from requests import post ... while(1): result = readSensors().result payl
使用 tweepy 运行一个 python 脚本,它在英语推文的随机样本中流式传输(使用 twitter 流式 API)一分钟,然后交替搜索(使用 twitter 搜索 API)一分钟,然后返回。我发
我已经在服务器 A 上设置了 neo4j,并且我在服务器 B 上运行了一个应用程序来连接到它。 如果我在服务器 A 上克隆应用程序并运行单元测试,它工作正常。但是在服务器 B 上运行它们,设置运行了
我是一名优秀的程序员,十分优秀!