0

以前のキーの値をデフォルト値として設定して、既存の辞書に新しいキーを追加しようとしています。

def check_data(end, start, profile):
    print(profile)

    for day in range((end-start).days+1):
        profile.setdefault(start+datetime.timedelta(day),
           {'expediture':0, 'top-up':0,
           'budget':profile[start+datetime.timedelta(day-1)]['budget'] })

start  = datetime.date(2019,2,1)
end    = datetime.date(2019,2,17)
check_data(end, start, month_data)

からの出力print(profile):

    {datetime.date(2019, 2, 1): {'expediture': 0, 'top-up': 0, 'budget': 100.0}}

 ---------------------------------------------------------------------------
    KeyError                                  Traceback (most recent call last)
    <ipython-input-4-e44462627692> in <module>
    ----> 1 check_data(end, start, month_data)

    <ipython-input-2-90b936150b04> in check_data(end, start, profile)
         20         profile.setdefault(start+datetime.timedelta(day),
         21                                     {'expediture':0, 'top-up':0,
    ---> 22
       'budget':profile[start+datetime.timedelta(day-1)]['budget'] })
        23
        24 def add_money(profile, topup, date=datetime.date.today()):

       KeyError: datetime.date(2019, 1, 31)

この値が既に存在する場合setdefault()にデフォルト値を に設定しようと する理由がわかりません。datetime.date(2019, 2, 1)

この問題を解決することはできますifが、どのように機能するかを理解したいと思いsetdefaultます。この問題には別の解決策があるかもしれません。

4

2 に答える 2

1

エラーを誤解しています。AKeyErrorは、辞書でキーを検索しようとしたが、そのキーが存在しないことを意味します。この場合、メソッド呼び出しに関連していないprofile[start+datetime.timedelta(day-1)]ように見えます。KeyErrorsetdefault

于 2019-02-15T17:47:56.973 に答える