Что не так при импорте?

Есть код, который лежит в 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 шт):

Автор решения: Antony

При импорте литералы не работают. Не знаю, почему. Проблему решил, заменив конструкцию с литералом.

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
→ Ссылка