在Python 3.6中将未定义的变量评估为字符串

时间:2018-01-17 16:35:28

标签: python python-3.x

如果我正在尝试评估逗号分隔值的列表,其中字符串未被引号括起,例如:

list = [54, 25, 1, 3467, 9, 45, 69, 420, 45, 65987, bob, 0, -5, 47.2, john, y]

Python显然希望将项[bob],[john]和[y]解析为变量。由于它们未定义,因此Python将引发回溯错误。

是否可以在错误发生时或错误发生之前将这些项目转换为字符串?

2 个答案:

答案 0 :(得分:-3)

天真的解决方案:

如果您想在列表中提取值,我建议将其设为@Carcigenicate建议的字符串并使用逗号分割。

my_list = '[54, 25, 1, 3467, 9, 45, 69, 420, 45, 65987, bob, 0, -5, 47.2, john, y]'

my_list = my_list.strip('[]')  # This will strip square brackeets from both ends
my_list.split(', ')  # since your input is comma and space separated list
['54', '25', '1', '3467', '9', '45', '69', '420', '45', '65987', 'bob', '0', '-5', '47.2', 'john', 'y']

这对你有帮助吗?

答案 1 :(得分:-3)

这些不是逗号分隔值,这不是列表。数据和源代码之间存在差异。如果定义了bob等,那么运行它会生成一个列表(当打印列表时,逗号只是格式化的一部分,而不是列表的实际部分),但是实际上,它只是编辑器中的文本。诸如"之类的短语转换为字符串"适用于数据,而不是源代码。如果您想操纵它,那么您必须将其视为数据。因此,例如,如果要添加引号,则可以执行以下操作:

list_string =  '[54, 25, 1, 3467, 9, 45, 69, 420, 45, 65987, bob, 0, -5, 47.2, john, y]'
list_from_string = list_string.replace('[','').replace(']','').split(', ')
for index,item in enumerate(list_from_string):
    try:
        item_as_int = int(item)
        item_as_float = float(item)
        if item_as_int == item_as_float:
            list_from_string[index] = item_as_int
        else:
            list_from_string[index] = item_as_float
    except:
        pass