2017-05-31 9 views
1

私はYAMLファイルを開いてデータを読み込むPython関数を持っています。 YAMLファイルには、2つのapiキーと1つのドメインが含まれています。私はプログラム内で使用できるように、辞書の各値を返す必要があります。しかし、私はエラーが表示されます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 } 

それはリストのインデックスは整数でなければならないことは何を意味するのでしょうか?中括弧が辞書を示していると思いましたか?これを行うには良い方法がありますか?あなたのYAMLファイルの独立した

+0

YAMLファイルはどのように見えますか? – miken32

+0

darksky: API_KEY: gmaps ABC12: API_KEY: ドメインABC123:maps.google.co.uk –

答えて

0

あなたは一つの要素でリストを作成し、別の文字列とそのインデックス、あなたならば['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です。私がそれを見なかったかどうかわからないIm、ありがとう。私はとても混乱していた!!!ありがとう。 –

+0

'load'を' safe_load'に変更してください。これは私の更新で書いたものです。 – Anthon

+0

好奇心を離れて、違いは何ですか? –

関連する問題