From 203f521084f0175fce398251b695aab83f43fa06 Mon Sep 17 00:00:00 2001 From: Chris <Christopher.Happe@uni-duesseldorf.de> Date: Fri, 13 Nov 2020 11:24:30 +0100 Subject: [PATCH] Jupyter Error mit sys.exit() behoben --- info4/kapitel-8/Interpreter/interpreter.py | 41 ++++++++++++---------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/info4/kapitel-8/Interpreter/interpreter.py b/info4/kapitel-8/Interpreter/interpreter.py index b02139c..ff765c5 100644 --- a/info4/kapitel-8/Interpreter/interpreter.py +++ b/info4/kapitel-8/Interpreter/interpreter.py @@ -42,7 +42,7 @@ class ErrorHandler: print("Variable " + k + ": " + str(v)) user_input = input("Drücke ENTER zum Fotfahren oder schreibe EXIT zum Beenden:") if user_input.lower() == 'exit': - sys.exit(0) + raise KeyboardInterrupt def process_assignment(value_list, forbidden_identifiers, identifier_token_1): @@ -239,21 +239,24 @@ def next_nonempty_token(current_function, expected_token): def interpret(program): - global error_handler, lex, values - lex = lexer.Lexer(regex_to_token, program) - error_handler = ErrorHandler(program) - values = {} - forbidden_identifiers = [] - current_token = next_token() - while current_token is not None: - current_token, values = process_program(values, forbidden_identifiers, current_token) - if current_token is not None: - if not current_token.k == 'SEMICOLON': - error_handler.handle_error("Semicolon erwartet") - current_token = next_token() - if current_token is None: - error_handler.handle_error("Semikolons werden nur zur Trennung und nicht zum " + - "Abschluss von Programmen verwendet") - if "x0" in values: - return values.get("x0") - return 0 + try: + global error_handler, lex, values + lex = lexer.Lexer(regex_to_token, program) + error_handler = ErrorHandler(program) + values = {} + forbidden_identifiers = [] + current_token = next_token() + while current_token is not None: + current_token, values = process_program(values, forbidden_identifiers, current_token) + if current_token is not None: + if not current_token.k == 'SEMICOLON': + error_handler.handle_error("Semicolon erwartet") + current_token = next_token() + if current_token is None: + error_handler.handle_error("Semikolons werden nur zur Trennung und nicht zum " + + "Abschluss von Programmen verwendet") + if "x0" in values: + return values.get("x0") + return 0 + except KeyboardInterrupt: + return -1 -- GitLab