我有一个漫长而复杂的方法,我将给出重要的部分:
def get_itter(self, sort_by=0): #sort_by is set to 0 for debugging purposes
...
r = self.parser(self.in_file) # parse a csv file
...
if type(sort_by) == int:
r = [i for i in r]
sort = sorted(r, key=sort_by)
...
现在我的问题是,当我运行此代码时,它会给我一个错误:TypeError: 'int' object is not callable
。为什么它会给我这个错误?
P.S。我是Python的新手,我正在尝试为我没写的代码添加一些功能。
答案 0 :(得分:4)
你设置:
sort_by=0
检查这是int
if type(sort_by) == int: # note: isinstance(sort_by, int) is preferred here
然后使用它:
sorted(r, key=sort_by)
当您将key
传递给sorted
时,它会尝试将该密钥应用于其排序序列中的所有项目,尝试使用每个项目调用它,例如:
sortvalues = [key(i) for i in seq]
如果key
是整数,则无法调用它:
0(1)
给出了您所看到的TypeError
。
目前尚不清楚您要尝试做什么,但如果您想按序列中的sort_by
项排序,则可以使用operator.itemgetter
:
from operator import itemgetter
sorted(r, key=itemgetter(sort_by))
答案 1 :(得分:1)
您将sort_by
设置为0,然后将其作为关键功能传递给sorted
。 Python将调用key
作为定义排序键的函数,这对0来说是不可能的。