python - ast.literal_eval 调用中格式错误的节点

标签 python python-3.x eval

据我了解,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/valohai/leval (免责声明:我的代码)或 https://pypi.org/project/pure-eval/相反。

关于python - ast.literal_eval 调用中格式错误的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77599953/

相关文章:

python - 如何使用 OpenCV 将 PyBullet 模拟坐标投影到渲染的帧像素坐标?

python - 将 OrgMode 中的 Python 输出解析为表

python - 模块未找到错误: No module named 'onnxruntime'

eval - eval() 的威力有多大?

c# - 如何使用 RavenDB 中的 eval 功能将项目添加到数组?

C#/ASP.NET - 带有 HTML 选择的中继器

python - Django Nose 这个测试怎么写?

python - 如何正确合并鸭子类型(duck typing)以返回原始类型?

python - 通过循环更新字典中的键

python-3.x - 如何在 Google Colab 笔记本中解压缩非常大的 zip 文件(>6gb)?