Python “区块链给予”';dict';“对象不可调用”;

Python “区块链给予”';dict';“对象不可调用”;,python,flask,typeerror,Python,Flask,Typeerror,我正在使用Flask在Python中创建一个区块链,但是当我尝试向我的请求发出HTTP请求时,出现了一个错误。当前完整代码位于。 我得到的错误是 TypeError“dict”对象不可调用 相关代码: 从hashlib导入sha256#导入 导入json 从时间导入时间 从textwrap导入dedent 从uuid导入uuid4 从烧瓶导入烧瓶,jsonify,请求 类区块链(对象): 定义初始化(self):#初始化区块链 self.chain=[] self.transactions_li

我正在使用Flask在Python中创建一个区块链,但是当我尝试向我的请求发出HTTP请求时,出现了一个错误。当前完整代码位于。 我得到的错误是

TypeError“dict”对象不可调用

相关代码:

从hashlib导入sha256#导入
导入json
从时间导入时间
从textwrap导入dedent
从uuid导入uuid4
从烧瓶导入烧瓶,jsonify,请求
类区块链(对象):
定义初始化(self):#初始化区块链
self.chain=[]
self.transactions_list=[]
self.add_块(proof=100,previous_hash=1)#Genesis块
def add_块(自我、证明、上一个_散列=无):
"""
创建新块并将其添加到链中
参数:
证明(int):由工作证明算法给出的证明
previous_hash(str):上一个块的哈希
返回:
块(dict):新块
"""
block={#创建块
“索引”:len(self.chain)+1,
“时间戳”:time(),
“事务”:self.transactions\u列表,
“证明”:证明,
“previous_hash”:previous_hash或self.hash(self.chain[-1])#查找前面的块哈希
}
self.chain.append(块)#追加到链
self.transactions_list=[]#重置事务列表
返回块
@静力学方法
def哈希(块):
"""
返回给定块的SHA-256哈希
参数:
block(dict):用于查找的哈希的块
返回:
哈希(str):给定块的哈希
"""
block_string=json.dumps(block,sort_keys=True).encode()#将块排序为字符串
hash=sha256(block_string).hexdigest()#查找哈希
返回散列
@财产
def end_块(自身):
"""
返回链中的最后一个块
返回:
最后一个块(dict):链中的最后一个块
"""
last_block=self.chain[-1]#查找链中的最后一个块
返回最后一个块
app=烧瓶(_u名称)#初始化烧瓶app
node_id=str(uuid4())。替换('-','')#设置节点id
区块链=区块链()
@app.route('/mine',methods=['GET'])
def mine():
last_block=区块链。end_block()#获取区块的证据
last\u hash=区块链.hash(last\u块)
证明=区块链。工作证明(最后一个散列)
奖励=1#奖励的价值
区块链。新交易(奖励矿工)
发送方='0',
收件人=节点id,
金额=奖励,
)
块=区块链。添加块(证明,最后一个散列)#伪造块
响应=({#创建响应
'消息':“新块伪造”,
“索引”:块[“索引”],
“事务”:块[“事务”],
“证明”:块[“证明”],
“上一个\u哈希”:块[“上一个\u哈希”],
})
返回jsonify(响应),200
完整错误报告为:


[2020-01-06 18:36:06,213] ERROR in app: Exception on /mine [GET]
Traceback (most recent call last):
  File "C:\Users\mauri\Anaconda3\lib\site-packages\flask\app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\mauri\Anaconda3\lib\site-packages\flask\app.py", line 1951, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\mauri\Anaconda3\lib\site-packages\flask\app.py", line 1820, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\mauri\Anaconda3\lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "C:\Users\mauri\Anaconda3\lib\site-packages\flask\app.py", line 1949, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\mauri\Anaconda3\lib\site-packages\flask\app.py", line 1935, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "c:/Users/mauri/OneDrive/Documents/GitHub/Python-Blockchain/blockchain.py", line 251, in mine
    last_block = blockchain.end_block()      #Getting the proof for the block
TypeError: 'dict' object is not callable
127.0.0.1 - - [06/Jan/2020 18:36:06] "GET /mine HTTP/1.1" 500 -


您的
end_块
方法是一个。这意味着您在访问它时应该省略括号,例如

last_block = blockchain.end_block  # Parentheses omitted
通过包含括号,您将获取thing
end\u block
返回(
last\u block
)并尝试将其作为函数调用,就像执行
last\u block()
一样


或者,从
end\u块

中删除
@属性
装饰器,这是否回答了您的问题?不,我看不到我在哪里尝试索引dict(end_块变量)。