向dict添加新密钥 - KeyError

时间:2018-01-02 02:26:29

标签: python python-2.7 dictionary

    def fibMemo(n):
        pad = {0:0, 1:1}  
        if n not in pad:
           print 'Not in dict ,adding', n, n-1, n-2
           pad[n] = pad[n-1] + pad[n-2]
       else:
           print pad[n]
    return 

   for i in range(0,31):
     fibMemo(i) 

第4行:返回KeyError:2,但我在添加新密钥值时,以防密钥不存在。刚开始使用Python,可以原谅无知。输出

    Error:
    0 
    1
    Not in dict ,adding 2 1 0 
    Not in dict ,adding 3 2 1
     Line 5: KeyError: 2
在i = 2完成之前

i = 3运行。

1 个答案:

答案 0 :(得分:2)

您将dict的初始化放在函数体中。

因此,每次执行该函数时,项目都会返回0:0和1:1。

当调用fibMemo(3)时,它将进入第5行,即:

<!DOCTYPE html>
<html lang="en">
 <head>
  <title>
   Bootstrap Example
  </title>
  <meta charset="utf-8"/>
  <meta content="width=device-width, initial-scale=1" name="viewport"/>
  <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js">
  </script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js">
  </script>
 </head>
 <body>
  <div class="container">
   <h2>
    Image Gallery
   </h2>
   <div class="row">
    <!--STARTDELETE-->
   </div>
   <!--ENDDELETE-->
  </div>
 </body>
</html>

由于垫[2]已添加,但稍后在垫初始化期间被擦除。它给出了关键错误。

您应该考虑在函数定义之前移动pad[3]=pad[2]+pad[1]