code: def console_exec(thread_id, frame_id, expression, dbg):
      
      frame = dbg.find_frame(thread_id, frame_id)
  
      is_multiline = expression.count('@LINE@') > 1
      expression = str(expression.replace('@LINE@', '\n'))
  
      # Not using frame.f_globals because of https://sourceforge.net/tracker2/?func=detail&aid=2541355&group_id=85796&atid=577329
      # (Names not resolved in generator expression in method)
      # See message: http://mail.python.org/pipermail/python-list/2009-January/526522.html
      updated_globals = {}
      updated_globals.update(frame.f_globals)
      updated_globals.update(frame.f_locals)  # locals later because it has precedence over the actual globals
  
      if IPYTHON:
          need_more = exec_code(CodeFragment(expression), updated_globals, frame.f_locals, dbg)
          if not need_more:
              pydevd_save_locals.save_locals(frame)
          return need_more
  
      interpreter = ConsoleWriter()
  
      if not is_multiline:
          try:
              code = compile_command(expression)
          except (OverflowError, SyntaxError, ValueError):
              # Case 1
              interpreter.showsyntaxerror()
              return False
          if code is None:
              # Case 2
              return True
      else:
          code = expression
  
      # Case 3
  
      try:
          Exec(code, updated_globals, frame.f_locals)
  
      except SystemExit:
          raise
      except:
          interpreter.showtraceback()
      else:
          pydevd_save_locals.save_locals(frame)
      return False
docs: returns 'False' in case expression is partially correct