Ejemplo n.º 1
0
 def evaluate(self, code):
     if not code.strip():
         # scheme.scheme_read can't handle empty strings.
         return None, ''
     log_id = output.new_log()
     try:
         exp = self.scheme.read_line(code)
         result = timer.timed(self.timeout, self.scheme.scheme_eval,
                              (exp, self._frame))
     except RuntimeError as e:
         stacktrace_length = 15
         stacktrace = traceback.format_exc().strip().split('\n')
         print('Traceback (most recent call last):\n  ...')
         print('\n'.join(stacktrace[-stacktrace_length:]))
         raise interpreter.ConsoleException(e)
     except exceptions.Timeout as e:
         print('# Error: evaluation exceeded {} seconds.'.format(e.timeout))
         raise interpreter.ConsoleException(e)
     except self.scheme.SchemeError as e:
         print('# Error: {}'.format(e))
         raise interpreter.ConsoleException(e, exception_type='SchemeError')
     except Exception as e:
         stacktrace = traceback.format_exc()
         token = '<module>\n'
         index = stacktrace.rfind(token) + len(token)
         stacktrace = stacktrace[index:].rstrip('\n')
         if '\n' in stacktrace:
             print('Traceback (most recent call last):')
         print(stacktrace)
         raise interpreter.ConsoleException(e)
     else:
         printed_output = ''.join(output.get_log(log_id))
         return result, debug.remove_debug(printed_output)
     finally:
         output.remove_log(log_id)
 def evaluate(self, code):
     log_id = output.new_log()
     try:
         try:
             result = timer.timed(self.timeout, eval, (code, self._frame))
         except SyntaxError:
             timer.timed(self.timeout, exec, (code, self._frame))
             result = None
     except RuntimeError as e:
         stacktrace_length = 15
         stacktrace = traceback.format_exc().strip().split('\n')
         print('Traceback (most recent call last):\n  ...')
         print('\n'.join(stacktrace[-stacktrace_length:]))
         raise interpreter.ConsoleException(e)
     except exceptions.Timeout as e:
         print(
             '# Error: evaluation exceeded {} seconds - check for infinite loops'
             .format(e.timeout))
         raise interpreter.ConsoleException(e)
     except Exception as e:
         stacktrace = traceback.format_exc()
         token = '<string>'
         token_start = stacktrace.rfind(token)
         index = stacktrace.find('\n', token_start) + 1
         stacktrace = stacktrace[index:].rstrip('\n')
         if '\n' in stacktrace:
             print('Traceback (most recent call last):')
         print(stacktrace)
         raise interpreter.ConsoleException(e)
     else:
         printed_output = ''.join(output.get_log(log_id))
         return result, debug.remove_debug(printed_output)
     finally:
         output.remove_log(log_id)
Ejemplo n.º 3
0
 def evaluate(self, code):
     if not code:
         return None, ''
     log_id = output.new_log()
     with self._lark_execution_guard():
         result = timer.timed(self.timeout, self._parser.parse, [], dict(text=code))
         printed_output = ''.join(output.get_log(log_id))
         return self.normalize(result.pretty()), debug.remove_debug(printed_output)