2017-05-31 58 views
1

我有一個python函數,它將打開一個YAML文件並讀取數據。 YAML文件包含兩個API鍵和一個域。我想在字典中返回每個值,以便可以在程序中使用它。但是我得到錯誤如何從yml文件獲取數據,然後作爲字典返回

「列表索引必須是整數,而不是str」。

我應該做的變量全球性的,所以它沒有返回任何東西?

的代碼是:

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 } 

是什麼意思了列表索引必須爲整數?我認爲花括號表示字典?還有更好的方法來做到這一點?

+0

YAML文件是什麼樣的? – miken32

+0

darksky: API_KEY:ABC12 gmaps: API_KEY:ABC123 域:maps.google.co.uk –

回答

0

獨立的YAML文件,如果你鍵入['xy']一個Python的提示你創建一個列表與一個元素,如果隨後指數與另一個字符串:

['xy']['abc'] 

你會得到錯誤。

你缺少在第5行config和6你的程序:

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 } 

請注意,在使用PyYAML是load安全風險,併爲您的數據,你應該使用safe_load()

+0

哇哦,是的,我很HAHAH。林不知道我怎麼看不到,謝謝。我很困惑!謝啦。 –

+0

確保將'load'更改爲'safe_load',這是我在更新中寫入的內容。 – Anthon

+0

出於好奇,有什麼不同? –

相關問題