Debug:ValueError: malformed node or string

本文探讨了ValueError: malformed node or string在尝试使用ast.literal_eval处理字符串时的常见问题,解释了引发错误的原因,并介绍了eval与literal_eval之间的区别,以及如何避免此类错误并确保字符串安全转换。
Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

1.ValueError: malformed node or string

ValueError:错误的节点或字符串:

异常展示:

2.异常原因:

df.col=df.col.apply(literal_eval)

输入:字符串

输出:对应的标准的python数据格式

错误是应为:df.col是字符串,df.col=df.col.apply(literal_eval)后,df.col是已经转换成指定类型的python类型,又执行了一次,df.col=df.col.apply(literal_eval),这个时候df.col不是字符串了,故类型不正确,报错。

Python中函数 eval 和 ast.literal_eval 的区别详解_南淮北安的博客-优快云博客_literal_eval python

def literal_eval(node_or_string):
    """
    Safely evaluate an expression node or a string containing a Python
    expression.  The string or node provided may only consist of the following
    Python literal structures: strings, bytes, numbers, tuples, lists, dicts,
    sets, booleans, and None.
    安全地计算包含Python的表达式节点或字符串表达式。提供的字符串或节点可能只包含以下内容Python文字结构:字符串,字节,数字,元组,列表,字典,
set、boolean和None。
    """
    if isinstance(node_or_string, str):
        node_or_string = parse(node_or_string, mode='eval')
    if isinstance(node_or_string, Expression):
        node_or_string = node_or_string.body
    def _convert(node):
        if isinstance(node, Constant):
            return node.value
        elif isinstance(node, (Str, Bytes)):
            return node.s
        elif isinstance(node, Num):
            return node.n
        elif isinstance(node, Tuple):
            return tuple(map(_convert, node.elts))
        elif isinstance(node, List):
            return list(map(_convert, node.elts))
        elif isinstance(node, Set):
            return set(map(_convert, node.elts))
        elif isinstance(node, Dict):
            return dict((_convert(k), _convert(v)) for k, v
                        in zip(node.keys, node.values))
        elif isinstance(node, NameConstant):
            return node.value
        elif isinstance(node, UnaryOp) and isinstance(node.op, (UAdd, USub)):
            operand = _convert(node.operand)
            if isinstance(operand, _NUM_TYPES):
                if isinstance(node.op, UAdd):
                    return + operand
                else:
                    return - operand
        elif isinstance(node, BinOp) and isinstance(node.op, (Add, Sub)):
            left = _convert(node.left)
            right = _convert(node.right)
            if isinstance(left, _NUM_TYPES) and isinstance(right, _NUM_TYPES):
                if isinstance(node.op, Add):
                    return left + right
                else:
                    return left - right
        raise ValueError('malformed node or string: ' + repr(node))
    return _convert(node_or_string)

​​​​​​Python中函数 eval 和 ast.literal_eval 的区别详解_南淮北安的博客-优快云博客_literal_eval python

这个函数的作用:判断需要计算的内容计算后还是不是合法的python类型,如果是则进行计算,否则不进行计算。

 只会执行合法的python类型,对于字符串进行转换时,出于安全考虑最好使用这个方法。

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

signals fault_type \ B007_0.mat {'BA': [-0.013883012957765627, -0.058345327497... Ball B007_1.mat {'BA': [-0.02494944028144085, -0.0365378082339... Ball B007_2.mat {'BA': [0.07479378686435131, 0.079340611790167... Ball B007_3.mat {'BA': [0.009824349258423883, 0.02149319198839... Ball B014_0.mat {'BA': [0.024658354915196502, -0.0034675798029... Ball B014_1.mat {'BA': [-0.04822308552571353, -0.0373992279589... Ball B014_2.mat {'BA': [-0.017082634938750042, 0.0061343383550... Ball B014_3.mat {'BA': [-0.08045545964036006, -0.0205419878302... Ball B021_0.mat {'BA': [0.054796216401331546, -0.0256383236580... Ball B021_1.mat {'BA': [0.02298951819677145, 0.026007322351074... Ball B021_2.mat {'BA': [0.034492387292542885, 0.00664811429551... Ball B021_3.mat {'BA': [-0.007503571932946665, 0.0188116802925... Ball IR007_0.mat {'BA': [0.008146494935619943, 0.11119444745787... InnerRace IR007_1.mat {'BA': [-0.005919276734113309, 0.0306565096160... InnerRace IR007_2.mat {'BA': [0.020330740551127616, -0.0003512772530... InnerRace IR007_3.mat {'BA': [0.054478223463571444, 0.03258908399769... InnerRace IR014_0.mat {'BA': [-0.05292454985378002, 0.03865574688212... InnerRace IR014_1.mat {'BA': [-0.0861482948301088, -0.02168799809420... InnerRace IR014_2.mat {'BA': [-0.06199636215603381, -0.0293638399008... InnerRace IR014_3.mat {'BA': [0.08284138035922405, 0.083807077688600... InnerRace IR021_0.mat {'BA': [0.006875656043494057, 0.04288811895150... InnerRace IR021_1.mat {'BA': [0.04895917507340281, 0.089961074183195... InnerRace IR021_2.mat {'BA': [-0.01889112806743308, -0.0060956384531... InnerRace IR021_3.mat {'BA': [0.16660231413676066, 0.133688130160499... InnerRace OR007@12_0.mat {'BA': [0.03869577297627246, 0.009362716596450... OuterRace OR007@12_1.mat {'BA': [0.034129085550335024, 0.06326095498653... OuterRace OR007@12_2.mat {'BA': [-0.0664110399316921, -0.02351798355187... OuterRace OR007@12_3.mat {'BA': [0.0021856223057470214, 0.0019039605846... OuterRace OR007@3_0.mat {'BA': [-0.06365597903859956, 0.00374164707416... OuterRace OR007@3_1.mat {'BA': [-0.053526355173926565, 0.0258620127785... OuterRace OR007@3_2.mat {'BA': [-0.029154225821404027, 0.0286266643863... OuterRace OR007@3_3.mat {'BA': [-0.016014932178030284, -0.146947395086... OuterRace OR007@6_0.mat {'BA': [-0.02933921018593409, 0.01190411325620... OuterRace OR007@6_1.mat {'BA': [-0.0065979914343945, -0.00128665612282... OuterRace OR007@6_2.mat {'BA': [0.022881088037517625, -0.0418608704194... OuterRace OR007@6_3.mat {'BA': [-0.03527995538030922, -0.0760404301577... OuterRace OR014@6_0.mat {'BA': [-0.04434567049587477, 0.02606975977118... OuterRace OR014@6_1.mat {'BA': [0.02609576843170789, -0.02943182800746... OuterRace OR014@6_2.mat {'BA': [-0.021932136269107706, 0.0345209201107... OuterRace OR014@6_3.mat {'BA': [0.01514816552089373, 0.005571667004573... OuterRace OR021@12_0.mat {'BA': [-0.017401234116071314, 0.0192550270115... OuterRace OR021@12_1.mat {'BA': [-0.085321021645438, -0.045606718974814... OuterRace OR021@12_2.mat {'BA': [0.008722406199429086, -0.0064873267382... OuterRace OR021@12_3.mat {'BA': [-0.05841310398981675, 0.00419627286478... OuterRace OR021@3_0.mat {'BA': [-0.009852854645115348, 0.0284625558395... OuterRace OR021@3_1.mat {'BA': [-0.003914165176411444, -0.002223779419... OuterRace OR021@3_2.mat {'BA': [0.09011397011962469, 0.018795790099842... OuterRace OR021@3_3.mat {'BA': [-0.09694209571538906, -0.0518651422040... OuterRace OR021@6_0.mat {'BA': [-0.01227973749216366, -0.0720871954545... OuterRace OR021@6_1.mat {'BA': [0.02246363240705738, 0.011999339627631... OuterRace OR021@6_2.mat {'BA': [-0.1318167447446025, -0.09503073089692... OuterRace OR021@6_3.mat {'BA': [-0.05220006122745787, -0.0353766982205... OuterRace fault_code fault_size load rpm file_id has_BA has_DE \ B007_0.mat B 0.007 0 1796.0 X118 True True B007_1.mat B 0.007 1 1772.0 X119 True True B007_2.mat B 0.007 2 1748.0 X120 True True B007_3.mat B 0.007 3 1722.0 X121 True True B014_0.mat B 0.014 0 1796.0 X185 True True B014_1.mat B 0.014 1 1772.0 X186 True True B014_2.mat B 0.014 2 1749.0 X187 True True B014_3.mat B 0.014 3 1724.0 X188 True True B021_0.mat B 0.021 0 1796.0 X222 True True B021_1.mat B 0.021 1 1774.0 X223 True True B021_2.mat B 0.021 2 1754.0 X224 True True B021_3.mat B 0.021 3 1729.0 X225 True True IR007_0.mat IR 0.007 0 1797.0 X105 True True IR007_1.mat IR 0.007 1 1772.0 X106 True True IR007_2.mat IR 0.007 2 1748.0 X107 True True IR007_3.mat IR 0.007 3 1721.0 X108 True True IR014_0.mat IR 0.014 0 1796.0 X169 True True IR014_1.mat IR 0.014 1 1774.0 X170 True True IR014_2.mat IR 0.014 2 1752.0 X171 True True IR014_3.mat IR 0.014 3 1728.0 X172 True True IR021_0.mat IR 0.021 0 1797.0 X209 True True IR021_1.mat IR 0.021 1 1774.0 X210 True True IR021_2.mat IR 0.021 2 1752.0 X211 True True IR021_3.mat IR 0.021 3 1728.0 X212 True True OR007@12_0.mat OR 0.007 0 1797.0 X156 True True OR007@12_1.mat OR 0.007 1 1773.0 X158 True True OR007@12_2.mat OR 0.007 2 1750.0 X159 True True OR007@12_3.mat OR 0.007 3 1724.0 X160 True True OR007@3_0.mat OR 0.007 0 1797.0 X144 True True OR007@3_1.mat OR 0.007 1 1774.0 X145 True True OR007@3_2.mat OR 0.007 2 1751.0 X146 True True OR007@3_3.mat OR 0.007 3 1725.0 X147 True True OR007@6_0.mat OR 0.007 0 1796.0 X130 True True OR007@6_1.mat OR 0.007 1 1773.0 X131 True True OR007@6_2.mat OR 0.007 2 1750.0 X132 True True OR007@6_3.mat OR 0.007 3 1725.0 X133 True True OR014@6_0.mat OR 0.014 0 1796.0 X197 True True OR014@6_1.mat OR 0.014 1 1772.0 X198 True True OR014@6_2.mat OR 0.014 2 1749.0 X199 True True OR014@6_3.mat OR 0.014 3 1723.0 X200 True True OR021@12_0.mat OR 0.021 0 1796.0 X258 True True OR021@12_1.mat OR 0.021 1 1771.0 X259 True True OR021@12_2.mat OR 0.021 2 1746.0 X260 True True OR021@12_3.mat OR 0.021 3 1718.0 X261 True True OR021@3_0.mat OR 0.021 0 1796.0 X246 True True OR021@3_1.mat OR 0.021 1 1771.0 X247 True True OR021@3_2.mat OR 0.021 2 1747.0 X248 True True OR021@3_3.mat OR 0.021 3 1719.0 X249 True True OR021@6_0.mat OR 0.021 0 1796.0 X234 True True OR021@6_1.mat OR 0.021 1 1771.0 X235 True True OR021@6_2.mat OR 0.021 2 1748.0 X236 True True OR021@6_3.mat OR 0.021 3 1721.0 X237 True True has_FE B007_0.mat True B007_1.mat True B007_2.mat True B007_3.mat True B014_0.mat True B014_1.mat True B014_2.mat True B014_3.mat True B021_0.mat True B021_1.mat True B021_2.mat True B021_3.mat True IR007_0.mat True IR007_1.mat True IR007_2.mat True IR007_3.mat True IR014_0.mat True IR014_1.mat True IR014_2.mat True IR014_3.mat True IR021_0.mat True IR021_1.mat True IR021_2.mat True IR021_3.mat True OR007@12_0.mat True OR007@12_1.mat True OR007@12_2.mat True OR007@12_3.mat True OR007@3_0.mat True OR007@3_1.mat True OR007@3_2.mat True OR007@3_3.mat True OR007@6_0.mat True OR007@6_1.mat True OR007@6_2.mat True OR007@6_3.mat True OR014@6_0.mat True OR014@6_1.mat True OR014@6_2.mat True OR014@6_3.mat True OR021@12_0.mat True OR021@12_1.mat True OR021@12_2.mat True OR021@12_3.mat True OR021@3_0.mat True OR021@3_1.mat True OR021@3_2.mat True OR021@3_3.mat True OR021@6_0.mat True OR021@6_1.mat True OR021@6_2.mat True 之后怎么用jupyter处理数据
09-24
### 错误原因 `raise ValueError('malformed node or string: ' + repr(node))` 错误通常在使用 `ast.literal_eval()` 函数时出现。该错误表示传入的字符串不是一个合法的 Python 字面量表达式,`ast.literal_eval()` 只能安全地计算由 Python 字面量(如字符串、数字、列表、元组、字典等)组成的表达式。 根据提供的引用,出现该错误的一个具体原因是对已经转换为 Python 类型的数据再次使用 `literal_eval`。例如,`df.col` 原本是字符串,使用 `df.col=df.col.apply(literal_eval)` 后,`df.col` 已经是指定类型的 Python 类型,若再次执行 `df.col=df.col.apply(literal_eval)`,就会因为 `df.col` 不是字符串而报错 [^2]。 ### 解决办法 - **检查输入数据类型**:确保传递给 `ast.literal_eval()` 的是字符串类型,并且该字符串是合法的 Python 字面量表达式。例如: ```python import ast try: data = '["apple", "banana", "cherry"]' result = ast.literal_eval(data) print(result) except ValueError as e: print(f"Error: {e}") ``` - **避免重复转换**:不要对已经转换为 Python 类型的数据再次使用 `ast.literal_eval()`。如果不确定数据是否已经转换,可以先检查数据类型 [^2]。 ```python import ast data = '["apple", "banana", "cherry"]' if isinstance(data, str): try: result = ast.literal_eval(data) print(result) except ValueError as e: print(f"Error: {e}") else: print("Data is already a Python object.") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值