Python ValueError:发送str时,它必须是十六进制字符串。得到:“';0x6e…32'&引用;

Python ValueError:发送str时,它必须是十六进制字符串。得到:“';0x6e…32'&引用;,python,django-rest-framework,ethereum,web3,web3py,Python,Django Rest Framework,Ethereum,Web3,Web3py,web3s.py from web3 import Web3 import json url = 'https://kovan.infura.io/v3/NODE' web3 = Web3(Web3.HTTPProvider(url)) abi = json.loads('[{"ABI"}]') Raw_ADDRESS = MY_ADDRESS address = web3.toChecksumAddress(Raw_ADDRESS) contract = web3.

web3s.py

from web3 import Web3
import json

url = 'https://kovan.infura.io/v3/NODE'
web3 = Web3(Web3.HTTPProvider(url))

abi = json.loads('[{"ABI"}]')
Raw_ADDRESS = MY_ADDRESS 
address = web3.toChecksumAddress(Raw_ADDRESS) 
contract = web3.eth.contract(address=address,abi=ABI)
default_GasPrice = '5'

def firstMethod(Address1,publicKey,privateKey,GasPrice = default_GasPrice ) :

    Address1 = web3.toChecksumAddress(Address1) 
    publicKey = web3.toChecksumAddress(publicKey) 

    if web3.isConnected()  :    
        nonce = web3.eth.get_transaction_count(publicKey) 
        transaction = contract.functions.firstMethod(Address1).buildTransaction({
            'from': publicKey , 
            'gasPrice': web3.toWei(GasPrice, 'gwei'),
            'nonce': nonce ,
            })
...
在web3s.py中定义address1和address2时,代码运行良好,但在导入并传递相同的参数后,在另一个文件(从Django Rest视图)中调用firstMethod()时,它返回:

File "venv/lib/python3.8/site-packages/eth_utils/conversions.py", line 159, in hexstr_if_str
    raise ValueError(
ValueError: when sending a str, it must be a hex string. Got: "'0x6e...32'"
如图所示,我使用infura而不是etherscan


问题出在哪里?

不知道您正在使用的etherium库,只是查看错误消息本身:看起来不需要
,也可能不是
0x
。确保发送的是文本字符串,而不是它的
repr()
,以避免使用额外的引号。请参阅--
0x
很好(如果存在则被忽略),因此正是引号给您带来了麻烦。我在代码中看不到足够的细节,不知道它们是从哪里来的——也许这是您编辑的值之一?A确实需要在没有其他人更改的情况下运行才能看到问题(可能使用testnet地址以便提供可用常量)?