python - 在 Ubuntu 上运行的 Python - TypeError:“Point”类型的对象不是 JSON 可序列化的
问题描述
我花了很多时间来解决这个问题,我用谷歌搜索并浏览了帖子,但没有成功。我有一个 python 脚本,它在我的 macOsx 计算机上运行良好,但我需要在线运行脚本,所以我使用 digitalOcean。
我有一个 HTTP 请求,我使用邮递员将数据发布到 Flask 应用程序
@app.route('/addtransaction', methods = ['POST'])
def add_transaction():
data = request.get_json()
private = account.get_private_key()
public = account.get_public_key()
transaction = account.create_transaction(data)
string_transaction = str(transaction)
signature = ecdsa.sign(string_transaction, private, curve=curve.secp256k1,
hashfunc=ecdsa.sha256)
index = blockchain.add_transaction(public, transaction, signature,
string_transaction)
#Broadcast the transaction to the Peer Network
#First create the transaction object
trans_object = {'sender_id': public,
'transaction': transaction,
'signature': signature,
'string_transaction': string_transaction }
#Then broadcast using the Transaction Publisher we created above
peerServer.broadcast_transaction(trans_object, transaction_pu)
is_valid = ecdsa.verify(signature, string_transaction, public,
curve.secp256k1, ecdsa.sha256)
transaction_id = transaction['transaction_id']
response = {'message': f'Transaction id: {transaction_id} will be
added to block {index}',
'transaction_details': string_transaction, 'signature_valid':
is_valid }
return jsonify(response), 201
当我尝试运行 jsondumps 时,我在广播事务方法期间收到错误 - 方法如下
def broadcast_transaction(self, transaction, publisher):
j_transaction = json.dumps(transaction, sort_keys=True)
publisher.send_json(j_transaction)
print(f'Just broadcasted transaction: {j_transaction}')
return
我收到错误 TypeError: Object of type 'Point' is not JSON serializable
完整报告:
Traceback (most recent call last):
File "/home/matshidiso/blockchainProjects/blockchain/myprojectenv/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "/home/matshidiso/blockchainProjects/blockchain/myprojectenv/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/matshidiso/blockchainProjects/blockchain/myprojectenv/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/matshidiso/blockchainProjects/blockchain/myprojectenv/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/home/matshidiso/blockchainProjects/blockchain/myprojectenv/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "/home/matshidiso/blockchainProjects/blockchain/myprojectenv/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "pythonBlockchain.py", line 330, in add_transaction
peerServer.broadcast_transaction(trans_object, transaction_pu)
File "pythonBlockchain.py", line 211, in broadcast_transaction
j_transaction = json.dumps(transaction, sort_keys=True)
File "/usr/lib/python3.6/json/__init__.py", line 238, in dumps
**kw).encode(obj)
File "/usr/lib/python3.6/json/encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python3.6/json/encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "/usr/lib/python3.6/json/encoder.py", line 180, in default
o.__class__.__name__)
TypeError: Object of type 'Point' is not JSON serializable
我很困惑,因为这个相同的脚本在我的个人 macbook 上运行得很好,没有错误,这让我认为问题可能出在操作系统上。我在这里想念什么?
在 macbook 和 ubuntu 服务器上运行 python 脚本有区别吗?
解决方案
推荐阅读
- reactjs - 仅在第二次执行时反应更新状态
- powershell - 无法在 powershell 的 try/catch 语句中捕获异常
- go - 如何使用接口和反射定义安全划分?
- c# - UWP 滑块 滑动后
- bash - Escape characters in AWK script within bash script
- django - Difference between my droplet's postgres database and a newly created managed database
- mongodb - Mongodb Exporter 不显示使用 Docker 和 Prometheus 的指标
- python-3.x - AttributeError: X962
- c# - .NET Core 中的事务注释属性
- android - Android - Listview is only updating with Firebase values after scroll