Python 为什么在将一长串代码放入函数后会出现语法错误?

Python 为什么在将一长串代码放入函数后会出现语法错误?,python,function,python-2.7,Python,Function,Python 2.7,我对python编程还是新手,但我有一个很好的小工具,可以在工作中使用。我编写的原始代码将进入csv文件,并将某些列设置为列表。代码正在运行,如下所示: with open('profiles.csv', 'r') as f: reader = csv.reader(f) for column in reader: numbers.append(column[0]) del numbers[0] with open('profiles.csv', 'r') as

我对python编程还是新手,但我有一个很好的小工具,可以在工作中使用。我编写的原始代码将进入csv文件,并将某些列设置为列表。代码正在运行,如下所示:

with open('profiles.csv', 'r') as f:
    reader = csv.reader(f)
    for column in reader:
        numbers.append(column[0])
del numbers[0]
with open('profiles.csv', 'r') as f:
    reader = csv.reader(f)
    for column in reader:
        devlist.append(column[0])        
del devlist[0]
随着我对函数越来越熟悉,我决定自己清理代码,但这段代码不起作用:

def getInfo(keyword, columnvar):
    with open('profiles.csv', 'r') as f:
        reader = csv.reader(f)
        for column in reader:
            '%s'.append(column['%s']) % (keyword, columnvar)
        del '%s'['%s'] % (keyword, columnvar)
getInfo(numbers, 0)
getInfo(devlist, 0)    
我不明白问题是什么,因为我完全复制了原始代码的格式。如果我不在%s周围加引号,我会得到

    %s.append(column[%s]) % (keyword, columnvar)
    ^
SyntaxError: invalid syntax
然而,如果我加上引号,我会得到

    del '%s'['%s'] % (keyword, columnvar)
SyntaxError: can't delete operator

任何帮助都将不胜感激

不能用同名字符串替换对象。下面是一个简单的例子,说明您的错误:

>>> l = [1,2] # a list
>>> l.append(3) # append an item; succeeds
>>> '%s'.append(4) % l
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'append'
>l=[1,2]#一个列表
>>>附加(3)#附加一项;成功
>>>“%s”。追加(4)%l
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
AttributeError:“str”对象没有属性“append”

l是一个列表对象,但当您尝试执行类似于
'%s'%l
的操作时,它会变成一个字符串对象

我想你有点误解了
%
操作符。它只是格式化一个字符串(顺便说一句,你应该使用
str.format
)。这里要做的是格式化字符串,然后
eval()
it(这是一个糟糕的做法!)

正确语法所需的是:

for column in reader:
    keyword.append(column[columnvar])
del keyword[columnvar]
我不明白问题是什么,因为我完全复制了原始代码的格式

该代码在语法上无效。Python是非常动态的,但它不是那么动态的。请注意,有一种方法可以使它变得动态,但这并不是您在这里真正应该做的

但是,如果我添加引号

这也是无效的语法。“
%s
”和其他替换仅在
string
s中工作,并且任意
string
s不会作为程序的一部分执行。Python对整个程序的文本进行词法分析(在执行/导入时)。您选择的语法无效

关于:

del numbers[0]
del devlist[0]

…我们正在清理,是吗?让我们在这里试试
csv
的功能。可以告诉您是否有标题行。并允许您按标题列的名称对这些字段进行索引。这样您就可以完全跳过这一位。

del关键字[columnvar]有什么问题吗?您试图对“%s”执行错误操作。append(…),因为“str”对象没有属性“append”