2014-10-08 57 views
-1

在我开始之前还有很多其他确切的问题,但是没有一个答案足以解决我的问题。类/功能log.info('foo')没有问题,运行一次,但是它把它称为第二次得到的错误TypeError: 'str' object is not callableTypeError:'str'对象不可调用。即使没有什么叫'str'

我发现this question有同样的问题我,但我没有什么所谓的海峡。我已经与其他功能进行过测试,即战争。

我的代码:

import praw 
import sys 
import traceback 
from accounts import * 

class logging: 

    def info(self, log): 
     self.info = '\033[94m' 
     self.rs = '\033[0m' 
     print self.info, 'INFO: ', self.rs 

    def warn(self, log): 
     self.warn = '\033[93m' 
     self.rs = '\033[0m' 
     print self.warn, 'WARNING: ', self.log, self.rs 

    def critical(self, log): 
     self.critical = '\033[91m' 
     self.rs = '\033[0m' 
     print self.critical, 'CRITICAL: ', log, self.rs 

def read_accounts(): 
    with open('accounts.py') as f: 
     for i, l in enumerate(f): 
      pass 

    i += 1 
    accounts = {} 

    while i > 0: 
     ac = globals()['account_%s' %i] 
     index = ac.find(':') 
     uname = ac[0:index] 
     password = ac[index+1:len(ac)] 
     accounts[uname] = password 
     i -= 1 

    log.info('Usernames loaded successfully! Usernames loaded:') 
    print accounts 

def main(): 
    log.info('Initilizing reddit accounts from file...') 
    try: 
     read_accounts() 
    except: 
     traceback.print_exc() 
     log.critical('Can not read accounts! Make sure format is correct!') 
     sys.exit() 


if __name__ == '__main__': 
    log = logging() 
    main() 

而且我知道在Python记录模块,但我想我自己做的事!

在此先感谢!

+0

您的'accounts'模块中是否有名为'log'的模块级变量? – nofinator 2014-10-08 17:55:31

回答

4

的问题是,你logging类重新定义了它的所有实例方法为字符串:

class logging: 

    def info(self, log): 
     self.info = '\033[94m' # self.info is not a function anymore 
     self.rs = '\033[0m' 
     print self.info, 'INFO: ', self.rs 

所以你第一次叫log.info,它调用info功能。第二次,它尝试调用字符串'\033[94m'

只需在所有方法中为该实例变量使用不同的名称 - 或者根本不要使其成为实例变量。无论如何,每次调用方法时都重新定义它:

class logging: 

    def info(self, log): 
     info_prefix = '\033[94m' # no conflict 
     self.rs = '\033[0m' 
     print info_prefix, 'INFO: ', self.rs 
+0

谢谢!太棒了! – George 2014-10-08 18:19:11

相关问题