title: How to correct "TypeError: 'NoneType' object is not subscriptable" in recursive function?
body: <pre><code>def Ancestors (otu,tree):
      if tree[otu][0][0] == None:
         return []
      else:
          return [otu,tree[otu][0][0]] + Ancestors (tree[otu][0][0],tree)
  </code></pre>
  
  <p>The problem essentially is that at some point, the function tries to call a something which is None, this happens instead of the function returning the list that I want. I thought the if statement had accounted for that, but it would seem I was wrong. Any advice?</p>
  
  <pre><code>Traceback (most recent call last):
    File "&lt;pyshell#41&gt;", line 1, in &lt;module&gt;
      Ancestors('A',a)
    File "C:\x.py", line 129, in Ancestors
      return [otu,tree[otu][0][0]] + Ancestors (tree[otu][0][0],tree)
    File "C:\x.py", line 129, in Ancestors
      return [otu,tree[otu][0][0]] + Ancestors (tree[otu][0][0],tree)
    File "C:\x.py", line 129, in Ancestors
      return [otu,tree[otu][0][0]] + Ancestors (tree[otu][0][0],tree)
    File "C:\x.py", line 129, in Ancestors
      return [otu,tree[otu][0][0]] + Ancestors (tree[otu][0][0],tree)
    File "C:\x.py", line 126, in Ancestors
      if tree[otu][0][0] == None:
  TypeError: 'NoneType' object is not subscriptable
  </code></pre>
  
  <p>This is what tree is</p>
  
  <pre><code>{'A': [('AD', 4.0), None, None], 'C': [('ADBFGC', 14.5), None, None], 'B': [('BF', 0.5), None, None], 'E': [('ADBFGCE', 17.0), None, None], 'D': [('AD', 4.0), None, None], 'G': [('BFG', 6.25), None, None], 'F': [('BF', 0.5), None, None], 'ADBFG': [('ADBFGC', 6.25), ('AD', 4.25), ('BFG', 2.0)], 'BF': [('BFG', 5.75), ('B', 0.5), ('F', 0.5)], 'ADBFGC': [('ADBFGCE', 2.5), ('ADBFG', 6.25), ('C', 14.5)], 'ADBFGCE': [None, ('ADBFGC', 2.5), ('E', 17.0)], 'BFG': [('ADBFG', 2.0), ('BF', 5.75), ('G', 6.25)], 'AD': [('ADBFG', 4.25), ('A', 4.0), ('D', 4.0)]}
  </code></pre>
  
  <p>with otu referring to any of the strings in the tree.</p>