code: def on_call(self, node):
          
          #  ('func', 'args', 'keywords'. Py<3.5 has 'starargs' and 'kwargs' too)
          func = self.run(node.func)
          if not hasattr(func, '__call__') and not isinstance(func, type):
              msg = "'%s' is not callable!!" % (func)
              self.raise_exception(node, exc=TypeError, msg=msg)
  
          args = [self.run(targ) for targ in node.args]
          starargs = getattr(node, 'starargs', None)
          if starargs is not None:
              args = args + self.run(starargs)
  
          keywords = {}
          if six.PY3 and func == print:
              keywords['file'] = self.writer
  
          for key in node.keywords:
              if not isinstance(key, ast.keyword):
                  msg = "keyword error in function call '%s'" % (func)
                  self.raise_exception(node, msg=msg)
              keywords[key.arg] = self.run(key.value)
  
          kwargs = getattr(node, 'kwargs', None)
          if kwargs is not None:
              keywords.update(self.run(kwargs))
  
          try:
              return func(*args, **keywords)
          except Exception as ex:
              self.raise_exception(
                  node, msg="Error running function call '%s' with args %s and "
                  "kwargs %s: %s" % (func.__name__, args, keywords, ex))
docs: Function execution.