Events

web3.py createFilter: filter => SyntaxError: 位置參數跟隨關鍵字參數

  • July 18, 2018
  • Web3.py 版本 4.2.1
  • geth版本:1.8.0-unstable

我已按照web3.py 指南進行過濾。

通過合約實例api:

event_filter = mycontract.events.myEvent.createFilter(fromBlock='latest', {'filter':{'arg1':10}})

但我收到這條線的錯誤:

myContract.events.LogJob.createFilter(fromBlock='latest', {'filter': {'arg1':10}})

我的主要目標是根據參數過濾事件。

我遇到的錯誤:

myContract.events.LogJob.createFilter(fromBlock='latest', {'filter': {'arg1':10}})
                                                                ^
SyntaxError: positional argument follows keyword argument

**$$ Q $$**我該如何解決這個錯誤?


**更新:**我關注了@Mikko Ohtamaa 的回答。現在我沒有收到任何錯誤,但[]即使我提供了正確的事件關鍵字(參數名稱及其值的字典),過濾器也會返回。

請看一個例子:

blockReadFrom = 1899201;
myFilter = eBlocBroker.events.LogJob.createFilter(fromBlock=blockReadFrom)
print(myFilter.get_all_entries())

返回,在這裡您可以看到發出了'storageID': 0under的事件AttributeDict

[AttributeDict({'address': '0x128c9F368F12C24Cc2a4f88dCDCf3daA13C9667e', 'transactionHash': HexBytes('0x8f7c50fe276057ea90985be6d14dc7abb79ee0430c66bd161861b582b7db0c97'), 'args': AttributeDict({'desc': 'Science', 'jobKey': 'QmRsaBEGcqxQcJbBxCi1LN9iz5bDAGDWR6Hx7ZvWqgqmdR', 'index': 21, 'storageID': 0, 'clusterAddress': '0x75A4c787c5c18C587B284a904165Ff06a269B48C'}), 'transactionIndex': 0, 'event': 'LogJob', 'blockHash': HexBytes('0x9782cb281aa72defe54e0f84055a03a0b1bf6c6f21bd3d276a1252098f83c15f'), 'logIndex': 0, 'blockNumber': 1899201})]

blockReadFrom = 1899201;
myFilter = eBlocBroker.events.LogJob.createFilter(fromBlock=blockReadFrom, argument_filters={'storageID':0})
print(myFilter.get_all_entries())

回報:

[]

有趣的是,即使 {'arg1': 999'arg111': 999etc.} 不存在,以下行也會返回有效輸出。

myFilter = eBlocBroker.events.LogJob.createFilter(fromBlock=blockReadFrom, argument_filters={'arg1': 999})


筆記:

有關更多資訊,請關注此已關閉問題:https ://github.com/ethereum/web3.py/issues/943#event-1723643072

我認為應該是:

 myContract.events.LogJob.createFilter(fromBlock='latest', argument_filters={'arg1':10})

您可以在此處查看實際的函式簽名:

https://web3py.readthedocs.io/en/latest/contracts.html?highlight=createfilter

請送出有關 web3.py 文件頁面的問題,因為它不反映目前的程式碼庫。

引用自:https://ethereum.stackexchange.com/questions/52521