我使用urllib3.PoolManager来发出http请求。在我的代码的某些部分,我使用这段代码来请求
resp = h.request(self.method, self.url, body=body, headers=headers, timeout=TIMEOUT, retries=retries)我得到错误SSL: CERTIFICATE_VERIFY_FAILED。下面是完整的堆栈跟踪。
File "/lib/python2.7/site-packages/urllib3/request.py", line 69, in request
**urlopen_kw)
File "/lib/python2.7/site-packages/urllib3/request.py", line 90, in request_encode_url
return self.urlopen(method, url, **extra_kw)
File "/lib/python2.7/site-packages/urllib3/poolmanager.py", line 248, in urlopen
response = conn.urlopen(method, u.request_uri, **kw)
File "/lib/python2.7/site-packages/urllib3/connectionpool.py", line 621, in urlopen
raise SSLError(e)
[SSL: CERTIFICATE_VERIFY_FAILED]预计会出现错误。但问题是,除了块之外,我无法捕捉try中的错误。
我试着用
except ssl.SSLError:但这并不能捕捉到这个错误。我也尝试过ssl.CertificateError,但没有结果。我可以通过使用异常类来捕获它,但是我需要捕获特定的错误,并以不同的方式处理它们。有人能帮我找个解决办法吗?
发布于 2017-12-18 06:18:16
我找到了解决办法。正在引发的异常类是urllib3.exceptions.SSLError.。
发布于 2021-03-23 15:17:48
迟答,但您可以使用requests.exceptions.SSLError捕获SSL错误。
import requests, traceback
try:
r = requests.get('https://domain.tld')
except (requests.exceptions.SSLError):
print(traceback.format_exc())发布于 2022-05-19 11:22:02
要查找任何异常的特定类型,可以使用type()
import requests
try:
r = requests.get('https://domain.tld')
except Exception as e:
print(type(e))输出:
<class 'requests.exceptions.ConnectionError'>这就导致我们:
import requests
try:
r = requests.get('https://domain.tld')
except requests.exceptions.ConnectionError as e:
print("Caught correctly")输出:
Caught correctlyhttps://stackoverflow.com/questions/47862835
复制相似问题