#python #list #function #keyword-argument #etherscan
Вопрос:
Я новичок в программировании и столкнулся со следующей проблемой.
Я не могу найти способ передать объекты списка в качестве аргументов в следующей функции.
Моя цель с помощью этой функции состоит в том, чтобы просмотреть все объекты списка один за другим и сохранить данные в виде переменной с именем erc20.
Ссылка на файл .json // Ссылка на etherscan-python github
from etherscan import Etherscan
import json
with open('adress-tracker.json') as json_file:
json_data = json.load(json_file)
print(json_data)
# Here we create a result list, in which we will store our addresses
result_list = [json_dict['Address'] for json_dict in json_data]
eth = Etherscan("APIKEY") #removed my api key
erc20 = eth.get_erc20_token_transfer_events_by_address(address = result_list, startblock="0", endblock="999999999", sort='asc')
print(erc20)
Это вернет следующую ошибку:
AssertionError: Error! Invalid address format -- NOTOK
Когда я напрямую добавляю адрес или связываю его с переменной, он работает просто отлично. Однако мне нужно найти способ, как применить функции ко всем адресам, так как я планирую добавить сотни.
Я попытался изменить список на каталог, а также попытался реализовать аргументы ключевых слов с помощью (*result_list) или создал новую переменную под названием params со всеми необходимыми аргументами. Затем используется (*параметры). Но, к сожалению, я не могу понять, как решить эту проблему.
Заранее большое вам спасибо!
Комментарии:
1. Добро пожаловать в StackOverflow! Знаете ли вы о
func(*args)
нотациях иfunc(**kwargs)
обозначениях?2.
address
параметр должен быть строкой, а не списком, поэтому используйте цикл for для перебораresults_list
и передачи значения по одному параметру адреса3. эта функция не может получить список адресов, и вам нужно использовать
for
-loop для отдельной проверки каждого адреса.
Ответ №1:
Эта функция ожидает один адрес, поэтому вам нужно использовать for
-loop для отдельной проверки каждого адреса
erc20 = []
for address in result_list:
result = eth.get_erc20_token_transfer_events_by_address(address=address,
startblock="0",
endblock="999999999",
sort='asc')
erc20.append(result)
print(erc20)
Редактировать:
Минимальный рабочий код, который работает для меня:
import os
import json
from etherscan import Etherscan
TOKEN = os.getenv('ETHERSCAN_TOKEN')
eth = Etherscan(TOKEN)
with open('addresses.json') as json_file:
json_data = json.load(json_file)
#print(json_data)
erc20 = []
for item in json_data:
print(item['Name'])
result = eth.get_erc20_token_transfer_events_by_address(address=item['Address'],
startblock="0",
endblock="999999999",
sort='asc')
erc20.append(result)
print('len(result):', len(result))
#print(erc20)
#for item in erc20:
# print(item)
Результат:
Name 1
len(result): 44
Name 2
len(result): 1043
Name 3
len(result): 1