当我将以下格式的数据传递到“parse_webhook”函数时,为什么会收到此错误消息:
ValueError: malformed node or string
?
谢谢!
webhook_data = {"side": "BUY","key": "8234023409fa3242309sdfasdf903024917325"}
def parse_webhook(webhook_data):
"""
:param webhook_data: POST data from tradingview, as a string.
:return: Dictionary version of string.
"""
data = ast.literal_eval(webhook_data)
return data
我得到的错误:
File "C:\Users\User\anaconda3\lib\ast.py", line 55, in _convert_num
raise ValueError('malformed node or string: ' + repr(node))
ValueError: malformed node or string: {'side': 'BUY', 'key': '8234023409fa3242309sdfasdf903024917325'}
ast.literal.eval
:安全地评估表达式节点或 Unicode 或 Latin-1 编码 包含 Python 表达式的字符串。提供的字符串或节点可以 仅包含以下 Python 文字结构:字符串、 数字、元组、列表、字典、布尔值和无。
ast.literal_eval
。它只需要一个字符串输入并将其转换为适当的 python 对象。您不能将列表/字典/元组等传递给 ast.literal_eval
.
以下代码片段是此方法的有效使用 -
import ast
# Converting a string representation of dictionary into dictionary.
webhook_data = ast.literal_eval('{"side": "BUY","key": "8234023409fa3242309sdfasdf903024917325"}')
print(webhook_data)
输出:
{'side': 'BUY', 'key': '8234023409fa3242309sdfasdf903024917325'}
当您有字符串形式的列表、元组、布尔值、数字、集合等时,您也可以使用它,并且此方法会将其评估为适当的 python 对象。
您已经拥有一本与您一起构建的词典。您可以通过执行以下编辑来使代码正常工作:
webhook_data = {"side": "BUY","key": "8234023409fa3242309sdfasdf903024917325"}
def parse_webhook(webhook_data):
"""
:param webhook_data: POST data from tradingview, as a string.
:return: Dictionary version of string.
"""
data = ast.literal_eval(str(webhook_data))
return data
但是上面的代码是多余的。您只需使用
str()
将字典转换为字符串,然后使用 ast.literal_eval
将字符串转换回字典。
注意:
由于 Python AST 编译器中的堆栈深度限制,使用足够大/复杂的字符串可能会导致 Python 解释器崩溃。
ast.literal_eval
会引发异常,因此如果不是有效的代码将不会执行。
ast.literal_eval()
需要一个字符串。使用 webhook_data
将 str()
转换为字符串即可。
webhook_data = {"side": "BUY","key": "8234023409fa3242309sdfasdf903024917325"}
def parse_webhook(webhook_data):
"""
:param webhook_data: POST data from tradingview, as a string.
:return: Dictionary version of string.
"""
data = ast.literal_eval(str(webhook_data)) # this fixes the issue
return data
print(parse_webhook(webhook_data))
输出:
{'side': 'BUY', 'key': '8234023409fa3242309sdfasdf903024917325'}
使用ast模块,示例:
ast.literal_eval(str_convert)