在我开始之前还有许多其他确切的问题,但没有一个答案足以解决我的问题。类/函数log.info('foo')
运行一次没有问题,但是第二次调用它会得到错误TypeError: 'str' object is not callable
我发现this question和我有同样的问题,但我没有任何名为str的东西。我已经与其他功能进行了测试,即战争。
我的代码:
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 :(得分: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