【问题标题】:'str' object is not callable TypeError'str' 对象不可调用 TypeError
【发布时间】:2026-02-13 22:35:01
【问题描述】:

在我的代码中,我试图从文件中提取一些数据。当我尝试在 第 61 行 上运行我的代码时出现此错误。我的代码在这里:

from datetime import date
from math import floor;
from adjset_builder import adjset_builder
def check_and_update(d,start,end,log):    
#    print start,end;
    if start in d:
        if end in d[start]:
            log.write("{0}-{1}\n".format(start, end))
            if d[start][end] == 1:
                print "one found"
            d[start][end] += 1

def build_dictionary(my_adjset,my_list,factor,outfile,log):
    log.write("building dictionary:\n");

    window_size = int(floor(len(my_list)*factor));
    if window_size<2:
        log.write("too small\n")
        return;   
    log.write('Total:{0},windowsize:{1}\n'.format(len(my_list),window_size));
    log.write("Window at place: 0,")
    for i in xrange(window_size):
        j = i+1;
        while j<window_size:
            check_and_update(my_adjset, my_list[i][1], my_list[j][1],log);
            j=j+1

    i=1;
    while i<=len(my_list)-window_size:
        log.write("{0},".format(i)) 
        j=i;
        k=i+window_size-1;
        while j<k:
            check_and_update(my_adjset, my_list[i][1], my_list[j][1],log);  
            j+=1
        i += 1  
    log.write("\nDictionary building done\n")        

def make_movie_list(infilename,factor):
    log=open('log.txt','w');
    outfile=open(infilename.split('.')[0]+"_plot_"+str(factor)+".txt",'w');
    f=open(infilename,'r');
    my_adjset=dict()
    adjset_builder('friends.txt', my_adjset);

    count =1
    while True:        
        string = f.readline();
        if string=='':
            break;        
        log.write("count:{0}\n".format(count))
        count += 1

        [movie,freunde] = string.split('=');
        freunde = freunde.split(';')
        mylist=[]
        for i in freunde:
            [user_id,date] = i.split(' ');
            [yy,mm,dd] = date.split('-');  
#            l=list((date(int(yy),int(mm),int(dd)),user_id))
            mylist.append([date(int(yy),int(mm),int(dd)),user_id]); ## line 61         
        log.write("list built");   
        print mylist         
        break;    
#        build_dictionary(my_adjset, mylist, factor,outfile,log) 
        del(mylist);   

    print 'Done'

    log.close();
    outfile.close();
    f.close();
    print count 


if __name__ == '__main__':    
    make_movie_list('grades_processed.txt',.5)

但是,当我尝试在“控制台”中模拟相同的东西时,我没有收到任何错误:

dd='12'
mm='2'
yy='1991'
user_id='98807'  
from datetime import date
from datetime import date
l=list((date(int(yy),int(mm),int(dd)),user_id))
l [datetime.date(1991, 2, 12), '98807']

可能是非常愚蠢的事情,但我是初学者,所以似乎无法注意到错误。谢谢!

【问题讨论】:

  • 您必须在代码中的某处声明变量名称str
  • 请显示错误(包括完整的回溯)。此外,行号并不能真正帮助我们。请清楚地标出导致错误的行。

标签: python python-2.7


【解决方案1】:

这使得date 成为一个函数:

from datetime import date

这使得date 成为一个字符串:

        [user_id,date] = i.split(' ');

你现在得到一个TypeError,因为date不再是一个函数:

mylist.append([date(int(yy),int(mm),int(dd)),user_id]); 

避免此错误的一种方法是import modules instead of functions:

import datetime as dt
mylist.append([dt.date(int(yy),int(mm),int(dd)),user_id])

或者更简洁,

mylist.append([dt.date(*date.split('-')), user_id])

PS:删除所有不必要的分号!

【讨论】:

    【解决方案2】:

    你有一个名为 date 的变量,重命名它,这样它就不会影响 datetime 中的 date 函数。

    【讨论】:

    • +1 好答案,可以通过一个简单的例子来改进 date = 'bla'date(int(yy), int(mm), int(dd)) 导致相同的错误。