From 378a36c7e1a7cedf6fa38864ade91acbbc06b966 Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Fri, 14 Feb 2020 09:19:51 +0000 Subject: [PATCH 1/3] Add missing exceptions --- Lib/test/test_baseexception.py | 2 - vm/src/builtins.rs | 95 ++++++++++++++++++---------------- vm/src/exceptions.rs | 71 +++++++++++++++++-------- 3 files changed, 100 insertions(+), 68 deletions(-) diff --git a/Lib/test/test_baseexception.py b/Lib/test/test_baseexception.py index 06e9ab3bd0..5291e4598f 100644 --- a/Lib/test/test_baseexception.py +++ b/Lib/test/test_baseexception.py @@ -18,8 +18,6 @@ class ExceptionClassTests(unittest.TestCase): "%s missing %s attribute" % (ins.__class__.__name__, attr)) - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_inheritance(self): # Make sure the inheritance hierarchy matches the documentation exc_set = set() diff --git a/vm/src/builtins.rs b/vm/src/builtins.rs index d13dbbcb8c..84fd82af64 100644 --- a/vm/src/builtins.rs +++ b/vm/src/builtins.rs @@ -848,68 +848,75 @@ pub fn make_module(vm: &VirtualMachine, module: PyObjectRef) { "NotImplemented" => ctx.not_implemented(), "Ellipsis" => vm.ctx.ellipsis.clone(), + // ordered by exception_hierarachy.txt // Exceptions: "BaseException" => ctx.exceptions.base_exception_type.clone(), + "SystemExit" => ctx.exceptions.system_exit.clone(), + "KeyboardInterrupt" => ctx.exceptions.keyboard_interrupt.clone(), + "GeneratorExit" => ctx.exceptions.generator_exit.clone(), "Exception" => ctx.exceptions.exception_type.clone(), - "ArithmeticError" => ctx.exceptions.arithmetic_error.clone(), - "AssertionError" => ctx.exceptions.assertion_error.clone(), - "AttributeError" => ctx.exceptions.attribute_error.clone(), - "NameError" => ctx.exceptions.name_error.clone(), - "OverflowError" => ctx.exceptions.overflow_error.clone(), - "RuntimeError" => ctx.exceptions.runtime_error.clone(), - "ReferenceError" => ctx.exceptions.reference_error.clone(), - "SyntaxError" => ctx.exceptions.syntax_error.clone(), - "IndentationError" => ctx.exceptions.indentation_error.clone(), - "TabError" => ctx.exceptions.tab_error.clone(), - "NotImplementedError" => ctx.exceptions.not_implemented_error.clone(), - "RecursionError" => ctx.exceptions.recursion_error.clone(), - "TypeError" => ctx.exceptions.type_error.clone(), - "ValueError" => ctx.exceptions.value_error.clone(), - "IndexError" => ctx.exceptions.index_error.clone(), - "ImportError" => ctx.exceptions.import_error.clone(), - "LookupError" => ctx.exceptions.lookup_error.clone(), "StopIteration" => ctx.exceptions.stop_iteration.clone(), "StopAsyncIteration" => ctx.exceptions.stop_async_iteration.clone(), + "ArithmeticError" => ctx.exceptions.arithmetic_error.clone(), + "FloatingPointError" => ctx.exceptions.floating_point_error.clone(), + "OverflowError" => ctx.exceptions.overflow_error.clone(), + "ZeroDivisionError" => ctx.exceptions.zero_division_error.clone(), + "AssertionError" => ctx.exceptions.assertion_error.clone(), + "AttributeError" => ctx.exceptions.attribute_error.clone(), + "BufferError" => ctx.exceptions.buffer_error.clone(), + "EOFError" => ctx.exceptions.eof_error.clone(), + "ImportError" => ctx.exceptions.import_error.clone(), + "ModuleNotFoundError" => ctx.exceptions.module_not_found_error.clone(), + "LookupError" => ctx.exceptions.lookup_error.clone(), + "IndexError" => ctx.exceptions.index_error.clone(), + "KeyError" => ctx.exceptions.key_error.clone(), + "MemoryError" => ctx.exceptions.memory_error.clone(), + "NameError" => ctx.exceptions.name_error.clone(), + "UnboundLocalError" => ctx.exceptions.unbound_local_error.clone(), + "OSError" => ctx.exceptions.os_error.clone(), + "BlockingIOError" => ctx.exceptions.blocking_io_error.clone(), + "ChildProcessError" => ctx.exceptions.child_process_error.clone(), + "ConnectionError" => ctx.exceptions.connection_error.clone(), + "BrokenPipeError" => ctx.exceptions.broken_pipe_error.clone(), + "ConnectionAbortedError" => ctx.exceptions.connection_aborted_error.clone(), + "ConnectionRefusedError" => ctx.exceptions.connection_refused_error.clone(), + "ConnectionResetError" => ctx.exceptions.connection_reset_error.clone(), + "FileExistsError" => ctx.exceptions.file_exists_error.clone(), + "FileNotFoundError" => ctx.exceptions.file_not_found_error.clone(), + "InterruptedError" => ctx.exceptions.interrupted_error.clone(), + "IsADirectoryError" => ctx.exceptions.is_a_directory_error.clone(), + "NotADirectoryError" => ctx.exceptions.not_a_directory_error.clone(), + "PermissionError" => ctx.exceptions.permission_error.clone(), + "ProcessLookupError" => ctx.exceptions.process_lookup_error.clone(), + "TimeoutError" => ctx.exceptions.timeout_error.clone(), + "ReferenceError" => ctx.exceptions.reference_error.clone(), + "RuntimeError" => ctx.exceptions.runtime_error.clone(), + "NotImplementedError" => ctx.exceptions.not_implemented_error.clone(), + "RecursionError" => ctx.exceptions.recursion_error.clone(), + "SyntaxError" => ctx.exceptions.syntax_error.clone(), + "TargetScopeError" => ctx.exceptions.target_scope_error.clone(), + "IndentationError" => ctx.exceptions.indentation_error.clone(), + "TabError" => ctx.exceptions.tab_error.clone(), "SystemError" => ctx.exceptions.system_error.clone(), + "TypeError" => ctx.exceptions.type_error.clone(), + "ValueError" => ctx.exceptions.value_error.clone(), "UnicodeError" => ctx.exceptions.unicode_error.clone(), "UnicodeDecodeError" => ctx.exceptions.unicode_decode_error.clone(), "UnicodeEncodeError" => ctx.exceptions.unicode_encode_error.clone(), "UnicodeTranslateError" => ctx.exceptions.unicode_translate_error.clone(), - "ZeroDivisionError" => ctx.exceptions.zero_division_error.clone(), - "KeyError" => ctx.exceptions.key_error.clone(), - "ModuleNotFoundError" => ctx.exceptions.module_not_found_error.clone(), - "EOFError" => ctx.exceptions.eof_error.clone(), - "MemoryError" => ctx.exceptions.memory_error.clone(), - - "OSError" => ctx.exceptions.os_error.clone(), - "IOError" => ctx.exceptions.os_error.clone(), - "FileNotFoundError" => ctx.exceptions.file_not_found_error.clone(), - "PermissionError" => ctx.exceptions.permission_error.clone(), - "FileExistsError" => ctx.exceptions.file_exists_error.clone(), - "BlockingIOError" => ctx.exceptions.blocking_io_error.clone(), - "InterruptedError" => ctx.exceptions.interrupted_error.clone(), - "ConnectionError" => ctx.exceptions.connection_error.clone(), - "ConnectionResetError" => ctx.exceptions.connection_reset_error.clone(), - "ConnectionRefusedError" => ctx.exceptions.connection_refused_error.clone(), - "ConnectionAbortedError" => ctx.exceptions.connection_aborted_error.clone(), - "BrokenPipeError" => ctx.exceptions.broken_pipe_error.clone(), // Warnings "Warning" => ctx.exceptions.warning.clone(), - "BytesWarning" => ctx.exceptions.bytes_warning.clone(), - "UnicodeWarning" => ctx.exceptions.unicode_warning.clone(), "DeprecationWarning" => ctx.exceptions.deprecation_warning.clone(), "PendingDeprecationWarning" => ctx.exceptions.pending_deprecation_warning.clone(), + "RuntimeWarning" => ctx.exceptions.runtime_warning.clone(), + "SyntaxWarning" => ctx.exceptions.syntax_warning.clone(), + "UserWarning" => ctx.exceptions.user_warning.clone(), "FutureWarning" => ctx.exceptions.future_warning.clone(), "ImportWarning" => ctx.exceptions.import_warning.clone(), - "SyntaxWarning" => ctx.exceptions.syntax_warning.clone(), + "UnicodeWarning" => ctx.exceptions.unicode_warning.clone(), + "BytesWarning" => ctx.exceptions.bytes_warning.clone(), "ResourceWarning" => ctx.exceptions.resource_warning.clone(), - "RuntimeWarning" => ctx.exceptions.runtime_warning.clone(), - "UserWarning" => ctx.exceptions.user_warning.clone(), - - "KeyboardInterrupt" => ctx.exceptions.keyboard_interrupt.clone(), - "GeneratorExit" => ctx.exceptions.generator_exit.clone(), - "SystemExit" => ctx.exceptions.system_exit.clone(), }); } diff --git a/vm/src/exceptions.rs b/vm/src/exceptions.rs index 3d30a86e4e..c46377e9a3 100644 --- a/vm/src/exceptions.rs +++ b/vm/src/exceptions.rs @@ -361,6 +361,7 @@ pub struct ExceptionZoo { pub arithmetic_error: PyClassRef, pub assertion_error: PyClassRef, pub attribute_error: PyClassRef, + pub buffer_error: PyClassRef, pub base_exception_type: PyClassRef, pub exception_type: PyClassRef, pub import_error: PyClassRef, @@ -369,14 +370,17 @@ pub struct ExceptionZoo { pub lookup_error: PyClassRef, pub module_not_found_error: PyClassRef, pub name_error: PyClassRef, + pub unbound_local_error: PyClassRef, pub not_implemented_error: PyClassRef, pub recursion_error: PyClassRef, + pub floating_point_error: PyClassRef, pub overflow_error: PyClassRef, pub reference_error: PyClassRef, pub runtime_error: PyClassRef, pub stop_iteration: PyClassRef, pub stop_async_iteration: PyClassRef, pub syntax_error: PyClassRef, + pub target_scope_error: PyClassRef, pub indentation_error: PyClassRef, pub tab_error: PyClassRef, pub system_error: PyClassRef, @@ -391,16 +395,21 @@ pub struct ExceptionZoo { pub memory_error: PyClassRef, pub os_error: PyClassRef, - pub file_not_found_error: PyClassRef, - pub permission_error: PyClassRef, - pub file_exists_error: PyClassRef, pub blocking_io_error: PyClassRef, - pub interrupted_error: PyClassRef, + pub child_process_error: PyClassRef, pub connection_error: PyClassRef, - pub connection_reset_error: PyClassRef, - pub connection_refused_error: PyClassRef, - pub connection_aborted_error: PyClassRef, pub broken_pipe_error: PyClassRef, + pub connection_aborted_error: PyClassRef, + pub connection_refused_error: PyClassRef, + pub connection_reset_error: PyClassRef, + pub file_exists_error: PyClassRef, + pub file_not_found_error: PyClassRef, + pub interrupted_error: PyClassRef, + pub is_a_directory_error: PyClassRef, + pub not_a_directory_error: PyClassRef, + pub permission_error: PyClassRef, + pub process_lookup_error: PyClassRef, + pub timeout_error: PyClassRef, pub warning: PyClassRef, pub bytes_warning: PyClassRef, @@ -432,19 +441,23 @@ impl ExceptionZoo { let arithmetic_error = create_exception_type("ArithmeticError", &exception_type); let assertion_error = create_exception_type("AssertionError", &exception_type); let attribute_error = create_exception_type("AttributeError", &exception_type); + let buffer_error = create_exception_type("BufferError", &exception_type); let import_error = create_exception_type("ImportError", &exception_type); let lookup_error = create_exception_type("LookupError", &exception_type); let index_error = create_exception_type("IndexError", &lookup_error); let key_error = create_exception_type("KeyError", &lookup_error); let name_error = create_exception_type("NameError", &exception_type); + let unbound_local_error = create_exception_type("UnboundLocalError", &name_error); let runtime_error = create_exception_type("RuntimeError", &exception_type); let reference_error = create_exception_type("ReferenceError", &exception_type); let stop_iteration = create_exception_type("StopIteration", &exception_type); let stop_async_iteration = create_exception_type("StopAsyncIteration", &exception_type); let syntax_error = create_exception_type("SyntaxError", &exception_type); + let target_scope_error = create_exception_type("TargetScopeError", &syntax_error); let system_error = create_exception_type("SystemError", &exception_type); let type_error = create_exception_type("TypeError", &exception_type); let value_error = create_exception_type("ValueError", &exception_type); + let floating_point_error = create_exception_type("FloatingPointError", &arithmetic_error); let overflow_error = create_exception_type("OverflowError", &arithmetic_error); let zero_division_error = create_exception_type("ZeroDivisionError", &arithmetic_error); let module_not_found_error = create_exception_type("ModuleNotFoundError", &import_error); @@ -462,20 +475,24 @@ impl ExceptionZoo { // os errors let os_error = create_exception_type("OSError", &exception_type); - - let file_not_found_error = create_exception_type("FileNotFoundError", &os_error); - let permission_error = create_exception_type("PermissionError", &os_error); - let file_exists_error = create_exception_type("FileExistsError", &os_error); let blocking_io_error = create_exception_type("BlockingIOError", &os_error); - let interrupted_error = create_exception_type("InterruptedError", &os_error); + let child_process_error = create_exception_type("ChildProcessError", &os_error); let connection_error = create_exception_type("ConnectionError", &os_error); - let connection_reset_error = - create_exception_type("ConnectionResetError", &connection_error); - let connection_refused_error = - create_exception_type("ConnectionRefusedError", &connection_error); let connection_aborted_error = create_exception_type("ConnectionAbortedError", &connection_error); + let connection_refused_error = + create_exception_type("ConnectionRefusedError", &connection_error); + let connection_reset_error = + create_exception_type("ConnectionResetError", &connection_error); + let file_exists_error = create_exception_type("FileExistsError", &os_error); + let file_not_found_error = create_exception_type("FileNotFoundError", &os_error); + let interrupted_error = create_exception_type("InterruptedError", &os_error); + let is_a_directory_error = create_exception_type("IsADirectoryError", &os_error); + let not_a_directory_error = create_exception_type("NotADirectoryError", &os_error); let broken_pipe_error = create_exception_type("BrokenPipeError", &connection_error); + let permission_error = create_exception_type("PermissionError", &os_error); + let process_lookup_error = create_exception_type("ProcessLookupError", &os_error); + let timeout_error = create_exception_type("TimeoutError", &os_error); let warning = create_exception_type("Warning", &exception_type); let bytes_warning = create_exception_type("BytesWarning", &warning); @@ -498,6 +515,7 @@ impl ExceptionZoo { arithmetic_error, assertion_error, attribute_error, + buffer_error, base_exception_type, exception_type, import_error, @@ -506,13 +524,16 @@ impl ExceptionZoo { lookup_error, module_not_found_error, name_error, + unbound_local_error, not_implemented_error, recursion_error, + floating_point_error, overflow_error, runtime_error, stop_iteration, stop_async_iteration, syntax_error, + target_scope_error, indentation_error, tab_error, system_error, @@ -526,15 +547,21 @@ impl ExceptionZoo { eof_error, memory_error, os_error, - file_not_found_error, - permission_error, - file_exists_error, blocking_io_error, - interrupted_error, + child_process_error, connection_error, - connection_reset_error, - connection_refused_error, connection_aborted_error, + connection_refused_error, + connection_reset_error, + file_exists_error, + file_not_found_error, + interrupted_error, + is_a_directory_error, + not_a_directory_error, + permission_error, + process_lookup_error, + timeout_error, + broken_pipe_error, warning, bytes_warning, From 7bb530dd896389ff03f73bcd25d144b3b23d6645 Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Fri, 14 Feb 2020 09:57:18 +0000 Subject: [PATCH 2/3] Fix exception repr --- Lib/test/test_baseexception.py | 2 -- vm/src/exceptions.rs | 5 +---- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/Lib/test/test_baseexception.py b/Lib/test/test_baseexception.py index 5291e4598f..044f27b5f3 100644 --- a/Lib/test/test_baseexception.py +++ b/Lib/test/test_baseexception.py @@ -86,8 +86,6 @@ class ExceptionClassTests(unittest.TestCase): self.assertEqual(given, expected, "%s: %s != %s" % (test_name, given, expected)) - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_interface_single_arg(self): # Make sure interface works properly when given a single argument arg = "spam" diff --git a/vm/src/exceptions.rs b/vm/src/exceptions.rs index c46377e9a3..efb4f6eda1 100644 --- a/vm/src/exceptions.rs +++ b/vm/src/exceptions.rs @@ -139,10 +139,7 @@ impl PyBaseException { fn repr(zelf: PyRef, vm: &VirtualMachine) -> String { let repr_args = exception_args_as_string(vm, zelf.args(), false); let cls = zelf.class(); - match repr_args.into_iter().exactly_one() { - Ok(one) => format!("{}({},)", cls.name, one), - Err(i) => format!("{}({})", cls.name, i.format(", ")), - } + format!("{}({})", cls.name, repr_args.iter().format(", ")) } } From 341ba1e2f8bde9e8c0a4eb96ca8cb4022a260a65 Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Wed, 26 Feb 2020 08:38:52 +0000 Subject: [PATCH 3/3] Reorder exceptions by exception_hierarachy.txt --- vm/src/exceptions.rs | 213 +++++++++++++++++++++---------------------- 1 file changed, 106 insertions(+), 107 deletions(-) diff --git a/vm/src/exceptions.rs b/vm/src/exceptions.rs index efb4f6eda1..75316b9a5d 100644 --- a/vm/src/exceptions.rs +++ b/vm/src/exceptions.rs @@ -355,42 +355,29 @@ pub fn normalize( #[derive(Debug)] pub struct ExceptionZoo { + pub base_exception_type: PyClassRef, + pub system_exit: PyClassRef, + pub keyboard_interrupt: PyClassRef, + pub generator_exit: PyClassRef, + pub exception_type: PyClassRef, + pub stop_iteration: PyClassRef, + pub stop_async_iteration: PyClassRef, pub arithmetic_error: PyClassRef, + pub floating_point_error: PyClassRef, + pub overflow_error: PyClassRef, + pub zero_division_error: PyClassRef, pub assertion_error: PyClassRef, pub attribute_error: PyClassRef, pub buffer_error: PyClassRef, - pub base_exception_type: PyClassRef, - pub exception_type: PyClassRef, + pub eof_error: PyClassRef, pub import_error: PyClassRef, + pub module_not_found_error: PyClassRef, + pub lookup_error: PyClassRef, pub index_error: PyClassRef, pub key_error: PyClassRef, - pub lookup_error: PyClassRef, - pub module_not_found_error: PyClassRef, + pub memory_error: PyClassRef, pub name_error: PyClassRef, pub unbound_local_error: PyClassRef, - pub not_implemented_error: PyClassRef, - pub recursion_error: PyClassRef, - pub floating_point_error: PyClassRef, - pub overflow_error: PyClassRef, - pub reference_error: PyClassRef, - pub runtime_error: PyClassRef, - pub stop_iteration: PyClassRef, - pub stop_async_iteration: PyClassRef, - pub syntax_error: PyClassRef, - pub target_scope_error: PyClassRef, - pub indentation_error: PyClassRef, - pub tab_error: PyClassRef, - pub system_error: PyClassRef, - pub type_error: PyClassRef, - pub value_error: PyClassRef, - pub unicode_error: PyClassRef, - pub unicode_decode_error: PyClassRef, - pub unicode_encode_error: PyClassRef, - pub unicode_translate_error: PyClassRef, - pub zero_division_error: PyClassRef, - pub eof_error: PyClassRef, - pub memory_error: PyClassRef, - pub os_error: PyClassRef, pub blocking_io_error: PyClassRef, pub child_process_error: PyClassRef, @@ -407,22 +394,33 @@ pub struct ExceptionZoo { pub permission_error: PyClassRef, pub process_lookup_error: PyClassRef, pub timeout_error: PyClassRef, + pub reference_error: PyClassRef, + pub runtime_error: PyClassRef, + pub not_implemented_error: PyClassRef, + pub recursion_error: PyClassRef, + pub syntax_error: PyClassRef, + pub target_scope_error: PyClassRef, + pub indentation_error: PyClassRef, + pub tab_error: PyClassRef, + pub system_error: PyClassRef, + pub type_error: PyClassRef, + pub value_error: PyClassRef, + pub unicode_error: PyClassRef, + pub unicode_decode_error: PyClassRef, + pub unicode_encode_error: PyClassRef, + pub unicode_translate_error: PyClassRef, pub warning: PyClassRef, - pub bytes_warning: PyClassRef, - pub unicode_warning: PyClassRef, pub deprecation_warning: PyClassRef, pub pending_deprecation_warning: PyClassRef, + pub runtime_warning: PyClassRef, + pub syntax_warning: PyClassRef, + pub user_warning: PyClassRef, pub future_warning: PyClassRef, pub import_warning: PyClassRef, - pub syntax_warning: PyClassRef, + pub unicode_warning: PyClassRef, + pub bytes_warning: PyClassRef, pub resource_warning: PyClassRef, - pub runtime_warning: PyClassRef, - pub user_warning: PyClassRef, - - pub keyboard_interrupt: PyClassRef, - pub generator_exit: PyClassRef, - pub system_exit: PyClassRef, } impl ExceptionZoo { @@ -434,41 +432,29 @@ impl ExceptionZoo { }; // Sorted By Hierarchy then alphabetized. let base_exception_type = create_exception_type("BaseException", &object_type); + let system_exit = create_exception_type("SystemExit", &base_exception_type); + let keyboard_interrupt = create_exception_type("KeyboardInterrupt", &base_exception_type); + let generator_exit = create_exception_type("GeneratorExit", &base_exception_type); + let exception_type = create_exception_type("Exception", &base_exception_type); - let arithmetic_error = create_exception_type("ArithmeticError", &exception_type); - let assertion_error = create_exception_type("AssertionError", &exception_type); - let attribute_error = create_exception_type("AttributeError", &exception_type); - let buffer_error = create_exception_type("BufferError", &exception_type); - let import_error = create_exception_type("ImportError", &exception_type); - let lookup_error = create_exception_type("LookupError", &exception_type); - let index_error = create_exception_type("IndexError", &lookup_error); - let key_error = create_exception_type("KeyError", &lookup_error); - let name_error = create_exception_type("NameError", &exception_type); - let unbound_local_error = create_exception_type("UnboundLocalError", &name_error); - let runtime_error = create_exception_type("RuntimeError", &exception_type); - let reference_error = create_exception_type("ReferenceError", &exception_type); let stop_iteration = create_exception_type("StopIteration", &exception_type); let stop_async_iteration = create_exception_type("StopAsyncIteration", &exception_type); - let syntax_error = create_exception_type("SyntaxError", &exception_type); - let target_scope_error = create_exception_type("TargetScopeError", &syntax_error); - let system_error = create_exception_type("SystemError", &exception_type); - let type_error = create_exception_type("TypeError", &exception_type); - let value_error = create_exception_type("ValueError", &exception_type); + let arithmetic_error = create_exception_type("ArithmeticError", &exception_type); let floating_point_error = create_exception_type("FloatingPointError", &arithmetic_error); let overflow_error = create_exception_type("OverflowError", &arithmetic_error); let zero_division_error = create_exception_type("ZeroDivisionError", &arithmetic_error); - let module_not_found_error = create_exception_type("ModuleNotFoundError", &import_error); - let not_implemented_error = create_exception_type("NotImplementedError", &runtime_error); - let recursion_error = create_exception_type("RecursionError", &runtime_error); + let assertion_error = create_exception_type("AssertionError", &exception_type); + let attribute_error = create_exception_type("AttributeError", &exception_type); + let buffer_error = create_exception_type("BufferError", &exception_type); let eof_error = create_exception_type("EOFError", &exception_type); - let indentation_error = create_exception_type("IndentationError", &syntax_error); - let tab_error = create_exception_type("TabError", &indentation_error); - let unicode_error = create_exception_type("UnicodeError", &value_error); - let unicode_decode_error = create_exception_type("UnicodeDecodeError", &unicode_error); - let unicode_encode_error = create_exception_type("UnicodeEncodeError", &unicode_error); - let unicode_translate_error = - create_exception_type("UnicodeTranslateError", &unicode_error); + let import_error = create_exception_type("ImportError", &exception_type); + let module_not_found_error = create_exception_type("ModuleNotFoundError", &import_error); + let lookup_error = create_exception_type("LookupError", &exception_type); + let index_error = create_exception_type("IndexError", &lookup_error); + let key_error = create_exception_type("KeyError", &lookup_error); let memory_error = create_exception_type("MemoryError", &exception_type); + let name_error = create_exception_type("NameError", &exception_type); + let unbound_local_error = create_exception_type("UnboundLocalError", &name_error); // os errors let os_error = create_exception_type("OSError", &exception_type); @@ -491,62 +477,65 @@ impl ExceptionZoo { let process_lookup_error = create_exception_type("ProcessLookupError", &os_error); let timeout_error = create_exception_type("TimeoutError", &os_error); + let reference_error = create_exception_type("ReferenceError", &exception_type); + let runtime_error = create_exception_type("RuntimeError", &exception_type); + let not_implemented_error = create_exception_type("NotImplementedError", &runtime_error); + let recursion_error = create_exception_type("RecursionError", &runtime_error); + let syntax_error = create_exception_type("SyntaxError", &exception_type); + let indentation_error = create_exception_type("IndentationError", &syntax_error); + let tab_error = create_exception_type("TabError", &indentation_error); + let target_scope_error = create_exception_type("TargetScopeError", &syntax_error); + let system_error = create_exception_type("SystemError", &exception_type); + let type_error = create_exception_type("TypeError", &exception_type); + let value_error = create_exception_type("ValueError", &exception_type); + let unicode_error = create_exception_type("UnicodeError", &value_error); + let unicode_decode_error = create_exception_type("UnicodeDecodeError", &unicode_error); + let unicode_encode_error = create_exception_type("UnicodeEncodeError", &unicode_error); + let unicode_translate_error = + create_exception_type("UnicodeTranslateError", &unicode_error); + let warning = create_exception_type("Warning", &exception_type); - let bytes_warning = create_exception_type("BytesWarning", &warning); - let unicode_warning = create_exception_type("UnicodeWarning", &warning); let deprecation_warning = create_exception_type("DeprecationWarning", &warning); let pending_deprecation_warning = create_exception_type("PendingDeprecationWarning", &warning); + let runtime_warning = create_exception_type("RuntimeWarning", &warning); + let syntax_warning = create_exception_type("SyntaxWarning", &warning); + let user_warning = create_exception_type("UserWarning", &warning); let future_warning = create_exception_type("FutureWarning", &warning); let import_warning = create_exception_type("ImportWarning", &warning); - let syntax_warning = create_exception_type("SyntaxWarning", &warning); + let unicode_warning = create_exception_type("UnicodeWarning", &warning); + let bytes_warning = create_exception_type("BytesWarning", &warning); let resource_warning = create_exception_type("ResourceWarning", &warning); - let runtime_warning = create_exception_type("RuntimeWarning", &warning); - let user_warning = create_exception_type("UserWarning", &warning); - - let keyboard_interrupt = create_exception_type("KeyboardInterrupt", &base_exception_type); - let generator_exit = create_exception_type("GeneratorExit", &base_exception_type); - let system_exit = create_exception_type("SystemExit", &base_exception_type); ExceptionZoo { + base_exception_type, + system_exit, + keyboard_interrupt, + generator_exit, + exception_type, + stop_iteration, + stop_async_iteration, arithmetic_error, + floating_point_error, + overflow_error, + zero_division_error, assertion_error, attribute_error, buffer_error, - base_exception_type, - exception_type, + eof_error, import_error, + module_not_found_error, + lookup_error, index_error, key_error, - lookup_error, - module_not_found_error, + memory_error, name_error, unbound_local_error, - not_implemented_error, - recursion_error, - floating_point_error, - overflow_error, - runtime_error, - stop_iteration, - stop_async_iteration, - syntax_error, - target_scope_error, - indentation_error, - tab_error, - system_error, - type_error, - value_error, - unicode_error, - unicode_decode_error, - unicode_encode_error, - unicode_translate_error, - zero_division_error, - eof_error, - memory_error, os_error, blocking_io_error, child_process_error, connection_error, + broken_pipe_error, connection_aborted_error, connection_refused_error, connection_reset_error, @@ -558,23 +547,33 @@ impl ExceptionZoo { permission_error, process_lookup_error, timeout_error, + reference_error, + runtime_error, + not_implemented_error, + recursion_error, + syntax_error, + target_scope_error, + indentation_error, + tab_error, + system_error, + type_error, + value_error, + unicode_error, + unicode_decode_error, + unicode_encode_error, + unicode_translate_error, - broken_pipe_error, warning, - bytes_warning, - unicode_warning, deprecation_warning, pending_deprecation_warning, + runtime_warning, + syntax_warning, + user_warning, future_warning, import_warning, - syntax_warning, + unicode_warning, + bytes_warning, resource_warning, - runtime_warning, - reference_error, - user_warning, - keyboard_interrupt, - generator_exit, - system_exit, } } }