2017-05-31 2 views
1

Ich habe eine Python-Funktion, die eine YAML-Datei öffnen und die Daten lesen wird. Die YAML-Datei enthält zwei API-Schlüssel und eine Domäne. Ich möchte jeden Wert in einem Wörterbuch zurückgeben, damit es im Programm verwendet werden kann. Allerdings bekomme ich den FehlerWie man Daten von einer Yml-Datei erhält, um dann als ein Wörterbuch zurückzukommen

"Liste Indizes müssen Ganzzahlen sein, nicht str".

Sollte ich nur die Variablen global machen, so dass es nichts zurückgeben muss?

Der Code ist:

def ImportConfig(): 
    with open("config.yml", 'r') as ymlfile: 
     config = yaml.load(ymlfile) 
     darksky_api = config['darksky']['api_key'] 
     gmaps_api = ['gmaps']['api_key'] 
     gmaps_domain = ['gmaps']['domain'] 
    return {'darksky_api_key': darksky_api, 'gmaps_api_key': gmaps_api, 'gmaps_domain': gmaps_domain } 

Was bedeutet es, dass die Liste Indizes ganze Zahlen sein müssen? Ich dachte, geschweifte Klammern deuten auf ein Wörterbuch hin? Gibt es auch einen besseren Weg, dies zu tun?

+0

Wie sieht die YAML-Datei aus? – miken32

+0

darksky: api_key: abc12 gmaps: api_key: abc123 Domain: maps.google.co.uk –

Antwort

0

Unabhängig von Ihrer YAML-Datei, wenn Sie ['xy'] eine die Aufforderung von Python Typ erstellen Sie eine Liste mit einem Element, und wenn Sie dann Index, dass durch eine andere Zeichenfolge:

['xy']['abc'] 

Sie werden feststellen, dass Fehler.

Sie vermissen config in Zeile 5 und 6 des Programms:

def ImportConfig(): 
    with open("config.yml", 'r') as ymlfile: 
     config = yaml.safe_load(ymlfile) 
     darksky_api = config['darksky']['api_key'] 
     gmaps_api = config['gmaps']['api_key'] 
     gmaps_domain = config['gmaps']['domain'] 
    return {'darksky_api_key': darksky_api, 'gmaps_api_key': gmaps_api, 'gmaps_domain': gmaps_domain } 

Bitte beachten Sie, dass load in PyYAML mit Sicherheitsrisiko und für Ihre Daten sollten Sie safe_load() verwenden.

+0

Oh wow, ja, ich bin hahah. Ich bin mir nicht sicher, wie ich das nicht gesehen habe, aber danke. Ich war so verwirrt !!! Danke, Mann. –

+0

Stellen Sie sicher, dass Sie die 'Load' in eine' safe_load' ändern, was ich in meinem Update geschrieben habe. – Anthon

+0

Aus Neugier, was ist der Unterschied? –

Verwandte Themen