据我了解,ast.literal_eval
适用于文字,那么为什么这会给我一个错误?
import ast
ast.literal_eval("1+2")
错误:
Traceback (most recent call last):
File "/snap/pycharm-community/355/plugins/python-ce/helpers/pydev/pydevd.py", line 1500, in _exec
pydev_imports.execfile(file, globals, locals) # execute the script
File "/snap/pycharm-community/355/plugins/python-ce/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "/home/home-pc/.config/JetBrains/PyCharmCE2023.2/scratches/scratch.py", line 3, in <module>
ast.literal_eval("(1+2)")
File "/usr/lib/python3.10/ast.py", line 110, in literal_eval
return _convert(node_or_string)
File "/usr/lib/python3.10/ast.py", line 109, in _convert
return _convert_signed_num(node)
File "/usr/lib/python3.10/ast.py", line 83, in _convert_signed_num
return _convert_num(node)
File "/usr/lib/python3.10/ast.py", line 74, in _convert_num
_raise_malformed_node(node)
File "/usr/lib/python3.10/ast.py", line 71, in _raise_malformed_node
raise ValueError(msg + f': {node!r}')
ValueError: malformed node or string on line 1: <ast.BinOp object at 0x7f85e1b73a00>
python-BaseException
最佳答案
在 ast.literal_eval()
中,+
运算符仅适用于从 Python 3.7 开始的复数,请参阅:
- 问题:https://github.com/python/cpython/issues/75959
- 修复提交:https://github.com/python/cpython/commit/d8ac4d1d5ac256ebf3d8d38c226049abec82a2a0
(换句话说,它确实与其他表达式一起工作的事实是一个错误。)
您可能想要例如https://github.com/valohai/leval (免责声明:我的代码)或 https://pypi.org/project/pure-eval/相反。
关于python - ast.literal_eval 调用中格式错误的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77599953/