Python - exec不解释字符串变量

时间:2016-02-04 10:30:53

标签: python string exec

无论我尝试什么,我一直对我不断得到的错误感到非常沮丧。我正在尝试从文件中的列表单词中创建变量,并将它们设置为空字符串(供以后使用)。

以下是代码段:

values = []
input_values = open('list.txt')
for i in input_values.readlines():
    i = i.strip("\n")
    values.append(str(i))
for i in values:
    exec(str(i) + " = ''")

这是输出:

Traceback (most recent call last):
  File "script.py", line 59, in <module>
    exec(str(i) + " = ''")
  File "<string>", line 2
    = ''
    ^
IndentationError: unexpected indent

我也尝试过不使用for i in values但仍然获得相同的输出。有什么奇怪的是我可以打印这个值,但不能使用它。如果我在print i行之后添加strip(),则line1会添加到输出的顶部。

所以这个:

values = []
input_values = open('list.txt')
for i in input_values.readlines():
    i = i.strip("\n")
    print i
    values.append(str(i))
    exec(str(i) + " = ''")

产生这个:

line1
Traceback (most recent call last):
  File "script.py", line 59, in <module>
    exec(str(i) + " = ''")
  File "<string>", line 2
    = ''
    ^
IndentationError: unexpected indent

我做错了什么?

1 个答案:

答案 0 :(得分:2)

文件末尾至少有一个空行,带有空格,导致错误。你想要strip所有行中的空格,然后检查它们是否为空,然后将它们附加到列表中:

values = []
input_values = open('list.txt')
for i in input_values.readlines():
    i = i.strip()
    if i:
        values.append(str(i))
for i in values:
    exec(str(i) + " = ''")

此外,.readlines是不必要的,values是不必要的,甚至exec完全没必要 - 相反,你可以使用它:

with open('list.txt') as input_values:
    for i in input_values:
        i = i.strip()
        if i:
            globals()[i] = ''

虽然如果您尝试设置名为5的变量(例如

),它不会抱怨