帶連接池的python請求(urllib3)不捕獲http錯誤。這是一個錯誤?或者我做錯了什麼?python requests/urllib3連接池不捕獲HTTP錯誤
#!/usr/bin/env python
import contextlib
import requests
import sys
connection_pool_size = 2
adapter = requests.adapters.HTTPAdapter(pool_connections=connection_pool_size,
pool_maxsize=connection_pool_size)
r_session = requests.Session()
r_session.mount('http', adapter)
try:
with contextlib.closing(r_session.get(sys.argv[1], timeout=30, allow_redirects=True)) as r:
print 'success %r' % r
except requests.exceptions.HTTPError as e:
print 'HTTPError %r' % e
except Exception as e:
print 'Exception %r' % e
輸出:
$ ./test.py https://github.com
success <Response [200]>
$ ./test.py https://github.com/sithlordyoyoma
success <Response [404]>
我期待HTTPError。難道我做錯了什麼?
關閉與contextlib我從這個線程should I call close() after urllib.urlopen()?。正如Alex Martelli所建議的那樣。
實際運行沒有連接請求也呈現出這種行爲
#!/usr/bin/env python
import contextlib
import requests
import sys
try:
with contextlib.closing(requests.get(sys.argv[1], timeout=30, allow_redirects=True)) as r:
print 'success %r' % r
except requests.exceptions.HTTPError as e:
print 'HTTPError %r' % e
except Exception as e:
print 'Exception %r' % e
輸出:
$ ./test.py https://github.com
success <Response [200]>
$ ./test.py https://github.com/sithlordyoyoma
success <Response [404]>
的urllib2這是否正確
#!/usr/bin/env python
import contextlib
import urllib2
import sys
try:
with contextlib.closing(urllib2.urlopen(sys.argv[1], timeout=30)) as r:
print 'success %r' % r
except urllib2.HTTPError as e:
print 'HTTPError %r' % e
except Exception as e:
print 'Exception %r' % e
輸出:
$ ./test.py https://github.com
success <addinfourl at 4338734792 whose fp = <socket._fileobject object at 0x1025a5c50>>
$ ./test.py https://github.com/sithlordyoyoma
HTTPError HTTPError()
'Response.raise_for_status()'可幫幫我?不是一個答案,因爲我不明白自己,當你*必須*必須使用它。 – zwol
你爲什麼期待'HTTPError'? –
404不是HTTPError嗎?另外,我正在用404演示。但是,這發生在400,502和503之間。到目前爲止,我注意到了這些。 – krafts