title: Get last function's arguments from traceback?
body: <p>I read <a href="https://stackoverflow.com/questions/1650713/get-last-functions-call-arguments-from-traceback">Get last function&#39;s call arguments from traceback?</a> but it is not specific enough to answer my problem.</p>
  
  <p>This is really bothering me since not having the call arguments is slowing me down and I am pretty sure that it is possible to get this kind of info from Python.</p>
  
  <p>Here is an example to illustrate the problem:</p>
  
  <pre><code># -*- coding: utf-8 -*-
  import sys
  import traceback
  import inspect
  import logging as log
  
  def fl(x):
      # exception is happening here
      y = 5/x
      return y
  
  
  def fm(x):
      return fl(x-3)
  
  
  def fn(a, b, c=None):
      return fm(c)
  
  
  def main():
  
      try:
          print fn(1, 2, c=3)
      except Exception as e:
          log.error('Unexpected problem.')
          log.error(e)
          traceback.print_exc()
          ### what I need to see is are the call arguments of the last / deepest call: ###
          ### def fl(x) was called with arguments: [(x, 3)]                            ###
          # this does not cut it:
          tb = sys.exc_info()[2]
          traceback.print_tb(tb)
          # this is broken:
          #frames = inspect.getinnerframes(tb)
          #log.error('Argvalues: %s', inspect.getargvalues(frames))
          # not sure:
          frames = inspect.trace()
          argvalues = inspect.getargvalues(frames[0][0])
          log.error('Argvalues: %s', inspect.formatargvalues(*argvalues))
  
  
  
  if __name__ == '__main__':
      main()
  </code></pre>
  
  <p>so I get details, but the call arguments are not contained:</p>
  
  <pre><code>ERROR:root:Unexpected problem.
  ERROR:root:integer division or modulo by zero
  Traceback (most recent call last):
    File "sample.py", line 24, in main
      print fn(1, 2, c=3)
    File "sample.py", line 18, in fn
      return fm(c)
    File "sample.py", line 14, in fm
      return fl(x-3)
    File "sample.py", line 9, in fl
      y = 5/x
  ZeroDivisionError: integer division or modulo by zero
    File "sample.py", line 24, in main
      print fn(1, 2, c=3)
    File "sample.py", line 18, in fn
      return fm(c)
    File "sample.py", line 14, in fm
      return fl(x-3)
    File "sample.py", line 9, in fl
      y = 5/x
  ERROR:root:Argvalues: ()
  </code></pre>