gpt4 book ai didi

python - 处理 IncompleteRead,URLError

转载 作者:太空狗 更新时间:2023-10-29 21:59:57 27 4
gpt4 key购买 nike

这是一段网络挖掘脚本。

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()

但这些都不起作用..

如何捕获 IncompleteReadURLError

最佳答案

我认为这个问题的正确答案取决于您认为什么是“引发错误的 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.IncompleteReadurllib.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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com