title: 'raise' inside 'try' , when and how do I use 'raise?
body: <p>So here's the code:</p>
  
  <pre><code>def fancy_divide(list_of_numbers, index):
      try:
          try:
              raise Exception("0")
          finally:
              denom = list_of_numbers[index]
              for i in range(len(list_of_numbers)):
              l    ist_of_numbers[i] /= denom
      except Exception as ex:
          print(ex)
  </code></pre>
  
  <p>If I call :</p>
  
  <pre><code>fancy_divide([0, 2, 4], 0)
  </code></pre>
  
  <p>why does it not print out '0' ?</p>
  
  <p>and if I edit the code like this :</p>
  
  <pre><code>def fancy_divide(list_of_numbers, index):
      try:
          try:
              raise Exception("0")
          finally:
              denom = list_of_numbers[index]
              for i in range(len(list_of_numbers)):
                  list_of_numbers[i] /= denom
      except Exception as ex:
          raise Exception("0")
          print(ex)
  </code></pre>
  
  <p>and then call the same thing, it prints:</p>
  
  <pre><code>Traceback (most recent call last):
  
    File "&lt;ipython-input-16-c1b0ac98281c&gt;", line 1, in &lt;module&gt;
      fancy_divide([0, 2, 4], 0)
  
    File "/Users/dsn/.spyder-py3/temp.py", line 10, in fancy_divide
      raise Exception("0")
  
  Exception: 0
  </code></pre>
  
  <p>Why is that ? And what is the right way to / when should I use raise?</p>