Python代码返回错误'对象不可调用'

时间:2015-11-01 16:55:12

标签: python encryption

所以,我已经开始使用加密编码,并且一直在尝试根据时间创建一个独特的加密密钥。到目前为止,这是我的代码:

from threading import Timer
from pyclbr import Function
import hashlib, binascii, time

key1=""
buffer1=""
buffer2=""

class RepeatedTimer(object):
    def __init__(self, interval, function, *args, **kwargs):
        self.timer=None
        self.function=function
        self.interval=interval
        self.args=args
        self.kwargs=kwargs
        self.is_running=False
        self.start()

    def _run(self):
        self.is_running=False
        self.start()
        self.function(*self.args,**self.kwargs)

    def start(self):
        if not self.is_running:
            self.timer=Timer(self.interval,self._run)
            self.timer.start()
            self.is_running=True

    def stop(self):
        self.timer.cancel()
        self.is_running=False

def generateKeys():
    global key1
    global buffer1
    global buffer2

    t=int((time.time())/10)
    t=hashlib.sha1(str(t).encode('utf-8'))
    t=t.hexdigest()
    t=t.encode('utf-8')
    t=binascii.hexlify(t)
    t=t.decode('utf-8')
    t=t[0:11]
    t=int(t)>>5
    buffer2=buffer1
    buffer1=key1
    key1=str(t)

def printKeys():
    print("Keys : "+key1+" "+buffer1+" "+buffer2)

timerStart=RepeatedTimer(10,generateKeys())
#generateKeys();
timerStart2=RepeatedTimer(11,printKeys())

每当我运行上面的代码时,我都会收到错误:

Exception in thread Thread-49:
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/threading.py", line 923, in _bootstrap_inner
    self.run()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/threading.py", line 1189, in run
    self.function(*self.args, **self.kwargs)
  File "/Users/Kiro/Documents/LiClipse Workspace/EncryptionFinal/pkg/enc_keygen.py", line 22, in _run
    self.function(*self.args,**self.kwargs)
TypeError: 'str' object is not callable

Exception in thread Thread-50:
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/threading.py", line 923, in _bootstrap_inner
    self.run()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/threading.py", line 1189, in run
    self.function(*self.args, **self.kwargs)
  File "/Users/Kiro/Documents/LiClipse Workspace/EncryptionFinal/pkg/enc_keygen.py", line 22, in _run
    self.function(*self.args,**self.kwargs)
TypeError: 'NoneType' object is not callable

有谁知道为什么?我想要的是generateKeys()函数每隔10秒运行一次,printKeys()函数每11秒告诉我一次这些键(检查它是否正确地将键分配给全局变量)。

这比任何事情都更多的实验,但希望有助于修复此代码,因为我希望它能够正常运行。

1 个答案:

答案 0 :(得分:0)

用你的行

timerStart=RepeatedTimer(10,generateKeys())

您正在将调用generateKeys()的结果移交给__init__方法。你真正想做的是交出功能本身。那你不能叫它:

timerStart = RepeatedTimer(10, generateKeys)