Odwołanie do konkretnego klucza w liście słowników

0

Witam,

mam problem z następującym programem. Jak na razie jest pobierana z coingecko lista kryptowalut do zmiennej globalnej coinData (w formie listy słowników), użytkownik podaje symbol konkretnej którą chce znaleźć i program ją wyświetla już jako konkretny element tej listy czyli ostateczny słownik.

import requests
coinData = None
currency = "pln"

def coinList():
    global coinData
    try: 
        response = requests.get("https://api.coingecko.com/api/v3/coins/list?include_platform=true")
        coinData = response.json()              #list of dictionaries
            
    except requests.exceptions.Timeout:
        print("Request timed out...")
    except requests.exceptions.ConnectionError as e:
        print(f"Connection error: {e}")
    except requests.exceptions.RequestException as r:
        print(f"System error: {r}")
        
            
def getCoin(symbol):
    #coinData: [ {'id': 'bitcoin', 'symbol': 'btc', 'name': 'Bitcoin', 'platforms': {}} ...]
    for coin in coinData:                       #coinData -> list of dictionaries
        if coin["symbol"] == symbol:
            return coin                             
    else:
        return None
                        
coinList()
symbol = input('Podaj symbol kryptowaluty którą chcesz znaleźć: ')
coin = getCoin(symbol)                          #returns dictionary with specified crypto
print(coin)

Nie mam zielonego pojęcia czemu program wysypuje się raz na 3 razy, tzn 3 razy wpiszę konkretną walutę, znajdzie ją i wyświetli, natomiast za 4 pokazuje poniższy błąd:

# Podaj symbol kryptowaluty którą chcesz znaleźć: eth
# Traceback (most recent call last):
#   File "c:\Users\Galaw\Documents\Git_Hub\Python\udemy\programs\cryptocantor.py", line 29, in <module>
#     coin = getCoin(symbol)              #dictionary with specified crypto      
#            ^^^^^^^^^^^^^^^
#   File "c:\Users\Galaw\Documents\Git_Hub\Python\udemy\programs\cryptocantor.py", line 21, in getCoin
#     if coin["symbol"] == symbol:
#        ~~~~^^^^^^^^^^
# TypeError: string indices must be integers, not 'str'
# PS C:\Users\Galaw\Documents\Git_Hub>

Z tego co rozumiem to coin["example"] jest konkretnym kluczem w danym słowniku a z tego błędu chyba wynika że program traktuje to jako odwołanie do elementu listy.

Byłbym bardzo wdzięczny za pomoc.

4

Z jakiegoś powodu coin jest stringiem. Interpreter jasno na to wskazuje string indices must be integers, not 'str'. Musisz dokładniej przestudiować co zwraca Ci to api i znaleźć jakieś generyczne rozwiązanie.

Edit. Odpaliłem sobie program i to wina api a raczej wyczerpania limitu -> {'status': {'error_code': 429, 'error_message': "You've exceeded the Rate Limit. Please visit https://www.coingecko.com/en/api/pricing to subscribe to our API plans for higher rate limits."}}

Więc w Twoim przypadku otrzymujesz na klatę status, który jest kluczem, czyli stringiem i dlatego dostajesz błąd.

0
ledi12 napisał(a):

Z jakiegoś powodu coin jest stringiem. Interpreter jasno na to wskazuje string indices must be integers, not 'str'. Musisz dokładniej przestudiować co zwraca Ci to api i znaleźć jakieś generyczne rozwiązanie.

Edit. Odpaliłem sobie program i to wina api a raczej wyczerpania limitu -> {'status': {'error_code': 429, 'error_message': "You've exceeded the Rate Limit. Please visit https://www.coingecko.com/en/api/pricing to subscribe to our API plans for higher rate limits."}}

Więc w Twoim przypadku otrzymujesz na klatę status, który jest stringiem i dlatego dostajesz błąd.

Dziękuję ślicznie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1