[英]build json response in python
I am trying to capture exceptions into one json object and print the output我正在尝试将异常捕获到一个 json object 并打印 output
import json, sys, traceback
import requests
output = {}
try:
r = requests.get('http://wwww.google.com/nothere')
r.raise_for_status()
print(r)
except requests.exceptions.Timeout as et:
output['status_code']='TIMEOUT'
output['status']='failed'
output['message']= json.dumps(et)
#print("Timeout: ",et)
except requests.exceptions.HTTPError as eh:
output['status_code']='HTTPError'
output['status']='failed'
output['message'] = json.dumps(eh)
#print("HTTPError: ",eh)
except requests.exceptions.ConnectionError as errc:
output['status_code']='ConnectTimeout'
output['status']='failed'
errorMessage = errc
print("Message: ",errorMessage)
output['message'] = errorMessage
#print ("Error Connecting:",errc)
except requests.exceptions.RequestException as err:
output['status_code']='GENErr'
output['status']='failed'
output['message'] = json.dumps(err)
print (json.dumps(output))
Output: Output:
Message: HTTPConnectionPool(host='wwww.google.com', port=80): Max retries exceeded with url: /nothere (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x000001B3A54384C0>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed'))
Traceback (most recent call last):
File "C:\ServiceNow\Teradatacsdev\agent\scripts\TDCloudNSPythonLibrary\helloworld.py", line 30, in <module>
print (json.dumps(output))
File "C:\Program Files\Python38\lib\json\__init__.py", line 231, in dumps
return _default_encoder.encode(obj)
File "C:\Program Files\Python38\lib\json\encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "C:\Program Files\Python38\lib\json\encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "C:\Program Files\Python38\lib\json\encoder.py", line 179, in default
raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type ConnectionError is not JSON serializable
Expected output:预期 output:
{"status_code": "ConnectTimeout", "status": "failed", "message":"HTTPConnectionPool(host='wwww.google.com', port=80): Max retries exceeded with url: /nothere (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x000001C5F15684C0>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed'))"}
I am trying to capture entire exception message in output['message'] json object.我正在尝试在输出 ['message'] json object 中捕获整个异常消息。 Any idea if I am doing anything wrong?
知道我做错了什么吗?
Because err
is the exception object itself, which is not JSON serializable, so you cannot pass it in json.dumps()
.因为
err
是 object 本身的异常,不是 JSON 可序列化的,所以不能在json.dumps()
中传递。 You need to convert it to a str by doing json.dumps(str(err))
您需要通过执行
json.dumps(str(err))
将其转换为 str
import json, sys, traceback
import requests
output = {}
try:
r = requests.get('http://wwww.google.com/nothere')
r.raise_for_status()
print(r)
except requests.exceptions.Timeout as et:
output['status_code']='TIMEOUT'
output['status']='failed'
output['message']= json.dumps(str(et))
#print("Timeout: ",et)
except requests.exceptions.HTTPError as eh:
output['status_code']='HTTPError'
output['status']='failed'
output['message'] = json.dumps(str(eh))
#print("HTTPError: ",eh)
except requests.exceptions.ConnectionError as errc:
output['status_code']='ConnectTimeout'
output['status']='failed'
errorMessage = errc
print("Message: ",errorMessage)
output['message'] = str(errorMessage)
#print ("Error Connecting:",errc)
except requests.exceptions.RequestException as err:
output['status_code']='GENErr'
output['status']='failed'
output['message'] = json.dumps(str(err))
print (json.dumps(output))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.