Что не так при импорте?
Есть код, который лежит в python-файле. К нему прикреплен импорт.
import technical_list
def get_all_information_exmo():
balances = find_all_balances_in_exmo()
exmo_list = technical_list.list_of_pairs
for pair in exmo_list:
symbols_pair = technical_list.find_exmo_pairs(pair[1])
test = ExmoAPI_instance.api_query('order_book', {
"pair": symbols_pair,
"limit":100,
})
bid_price = test[f'{symbols_pair}']['bid'][0][0]
ask_price = test[f'{symbols_pair}']['ask'][0][0]
pair.insert(0, 'exmo')
pair.append(float(bid_price))
pair.append(float(ask_price))
for balance in balances:
if str(balance[1]) == str(pair[2]):
pair.insert(3, float(balance[2]))
for balance in balances:
if str(balance[1]) == str(pair[4]):
pair.insert(5, float(balance[2]))
return exmo_list
В итоге скрепляется куча данных и на выходе мы имеем, что-то типа этого.
[['exmo', 'BTCUSDT', 'BTC', 0.0, 'USDT', 0.0, 47114.5, 47115.0], ['exmo', 'ETHUSDT', 'ETH', 0.0, 'USDT', 0.0, 3401.35, 3401.4], ['exmo', 'XRPUSDT', 'XRP', 0.0, 'USDT', 0.0, 1.0931, 1.0932]]
Если я запускаю функцию внутри этого файла, все работает без проблем. Однако, если я создаю новый python файл, импортирую туда этот, то получаю ошибку. Привожу пример. Предположим, что этот файл называется exmo.py
Создаю новый. Называю его calculation.py
import exmo
details = exmo.get_all_information_exmo()
print(details)
Output
symbols_pair = technical_list.find_exmo_pairs(pair[0])
File "c:\Users\Pumpetee\Desktop\work\back august 2021\Orfey_multiprotocol\technical_list.py", line 12, in find_exmo_pairs
symbol = exmo_replace_pair_name[f'{need}']
KeyError: 'BIBYT'
Думаю, ладно, пойду в в technical_list. Искать 'BIBYT', которого там отродясь не было. Содержимое:
exmo_replace_pair_name = {
'BTCUSDT': 'BTC_USDT',
'ETHUSDT': 'ETH_USDT',
'XRPUSDT': 'XRP_USDT'
}
def find_exmo_pairs(pair):
need = str(pair).upper()
symbol = exmo_replace_pair_name[f'{need}']
return symbol
Ошибок нет. В родном файле функция выполняется нормально. В новом почему-то тупит. Что делаю неправильно?
UPD. Перенес полностью всю конструкцию из technical.py в exmo.py Начала ругаться на тоже самое, что и в импорте. Но уже внутри файла. Видимо, нельзя применять литерал в этой конструкции.
Ответы (1 шт):
При импорте литералы не работают. Не знаю, почему. Проблему решил, заменив конструкцию с литералом.
def find_exmo_pairs(pair):
need = str(pair).upper()
symbol = exmo_replace_pair_name[f'{need}']
return symbol
заменил на
def find_exmo_pairs(pair):# Поиск замены для стандартных арбитражей EXMO
need = str(pair).upper()
for s in exmo_replace_pair_name.items():
if str(s[0]) == str(need):
symbol = str(s[1])
print(symbol)
return symbol