将字符串列表转换为正确的类型

问题描述 投票:1回答:2

我正在尝试将标记化的字符串列表转换为适当类型的列表。该函数typeChange被调用以返回适当类型的字符串版本。

到目前为止,我的代码执行以下所有操作,除了最后一种情况。有没有简单的方法可以解决此问题?

例如:

"1" -> 1
"True" -> True
"\str" -> "\str"
"[1 2 3 4 5]" -> [1,2,3,4,5]
"[1 2 3 4 5 x]" -> [1,2,3,4,5,"x"]

这是我的简化PostScript解释器的typeChange函数。

def typeChange(c):
    try:
        if '[' in c:    # checking if it is a list, for some reason can't do or ']', because ints return as a list
            retList = list(map(int, (c.strip('][').split(' '))))
            return (len(retList), retList)
        if c=='True':
            return True
        elif c=='False':
            return False
        return int(c)
    except:
        return c

我的预期结果都适用于所有提供的情况,除非字符串/变量在列表中:

预期:'[1 x 2 3 4]'->[1,"x",2,3,4]实际:'[1 x 2 3 4]'-> '[1 x 2 3 4]'

python postscript
2个回答
1
投票

由于输出字符串'[1 x 2 3 4]'与输入字符串相同,这意味着return c块中的行except被触发,因此try块中的某些内容引发错误。


0
投票
def typeChange(c):
    try:
        if '[' in c:    # checking if it is a list, for some reason can't do or ']', because ints return as a list
            retList = [int(x) if x.isdigit() else str(x) for x in c.strip('[]').split(' ')]
            return retList
        if c=='True':
            return True
        elif c=='False':
            return False
        return int(c)
    except:
        return c

typeChange('[1 2 3 4 5 x]')
[1, 2, 3, 4, 5, 'x']
© www.soinside.com 2019 - 2024. All rights reserved.