+++ /dev/null
-import traceback, sys
-
-class InterpreterException(Exception):
- pass
-
-class Sandbox:
- def __init__(self, symbols) -> None:
- self.__syms = globals()
- self.__syms.update(symbols)
-
- def execute(self, file):
- with open(file) as f:
- return self.executes(f.read(), file)
-
- def executes(self, str, file=""):
- try:
- local_ctx = {}
- glb_ctx = self.__syms.copy()
- exec(str, glb_ctx, local_ctx)
- return local_ctx
- except SyntaxError as err:
- error_class = err.__class__.__name__
- detail = err.args[0]
- line_number = err.lineno
- except Exception as err:
- error_class = err.__class__.__name__
- detail = err.args[0]
- cl, exc, tb = sys.exc_info()
- line_number = traceback.extract_tb(tb)[1][1]
-
- print(f"LunaBuild failed: {error_class} at ./{file}:{line_number}, {detail}")
- raise InterpreterException("load error")
\ No newline at end of file