Python 3.x python3try/except在使用韧性修饰符时失败
尝试使用请求函数实现重试/退避,然后在所有重试失败时返回HTTP状态。似乎我可以让重试工作,或者使用try/except,但不能同时使用这两个选项。包装在另一个函数中没有帮助 OSX mojave上的Python 3.7.7 请求2.24.0 韧性6.2.0 函数1有一个装饰器,没有try/except调用韧性规则,但我没有得到http错误作为返回:Python 3.x python3try/except在使用韧性修饰符时失败,python-3.x,python-requests,tenacity,Python 3.x,Python Requests,Tenacity,尝试使用请求函数实现重试/退避,然后在所有重试失败时返回HTTP状态。似乎我可以让重试工作,或者使用try/except,但不能同时使用这两个选项。包装在另一个函数中没有帮助 OSX mojave上的Python 3.7.7 请求2.24.0 韧性6.2.0 函数1有一个装饰器,没有try/except调用韧性规则,但我没有得到http错误作为返回: In [1330]: @retry(reraise=True,wait=wait_fixed(1), stop=stop_after_attemp
In [1330]: @retry(reraise=True,wait=wait_fixed(1), stop=stop_after_attempt(3))
...: def geturl(url):
...: """
...: get the url and raise http request errors for tenacity
...: """
...: print(datetime.now().strftime('%Y-%m-%d-%H:%M:%S'))
...: headers = {'user-agent': 'my-app/0.0.1','Content-Type':'application/json'}
...: data = {'name':'testcall','service':'armor'}
...: r=None
...: r = requests.post(url, data=json.dumps(data), headers=headers)
...: r.raise_for_status()
...: return r.status_code
...:
In [1331]: geturl(flakyurl)
2020-09-07-14:48:19
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): snout:7777
DEBUG:urllib3.connectionpool:http://snout:7777 "POST /flakyservice HTTP/1.1" 406 27
2020-09-07-14:48:20
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): snout:7777
DEBUG:urllib3.connectionpool:http://snout:7777 "POST /flakyservice HTTP/1.1" 405 27
2020-09-07-14:48:21
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): snout:7777
DEBUG:urllib3.connectionpool:http://snout:7777 "POST /flakyservice HTTP/1.1" 405 27
---------------------------------------------------------------------------
HTTPError Traceback (most recent call last)
...
HTTPError: 405 Client Error: METHOD NOT ALLOWED for url: http://snout:7777/flakyservice
带有try/except的函数2获得正确的错误,但无法调用坚韧性
In [1332]: @retry(reraise=True,wait=wait_fixed(1), stop=stop_after_attempt(3))
...: def geturl3(url):
...: print(datetime.now().strftime('%Y-%m-%d-%H:%M:%S'))
...: headers = {'user-agent': 'my-app/0.0.1','Content-Type':'application/json'}
...: data = {'name':'testcall','service':'armor'}
...: r=None
...: try:
...: r = requests.post(url, data=json.dumps(data), headers=headers)
...: r.raise_for_status()
...: return 'sent', r.status_code
...: except requests.exceptions.HTTPError as err:
...: return 'http failed', err
In [1334]: geturl3(flakyurl)
2020-09-07-15:23:00
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): snout:7777
DEBUG:urllib3.connectionpool:http://snout:7777 "POST /flakyservice HTTP/1.1" 404 27
Out[1334]:
('http failed',
requests.exceptions.HTTPError('404 Client Error: NOT FOUND for url: http://snout:7777/flakyservice'))
编辑:
修复方法是在异常后为状态()提高强度-这将重新提升并捕获韧性在编辑的问题中回答: 修复方法是在异常后为_status()r.raise_-这将重新提升并捕获韧性