# based on https://stackoverflow.com/a/39381428 # Parses and executes a block of Python code, and returns the eval result of the last statement import ast def exec_then_eval(code, _globals, _locals): block = ast.parse(code, mode='exec') # assumes last node is an expression last = ast.Expression(block.body.pop().value) exec(compile(block, '', mode='exec'), _globals, _locals) return eval(compile(last, '', mode='eval'), _globals, _locals)