def test_Unhachable_type(): try: {[1, 2]: 1} except TypeError as e: message = str(e) friendly.explain_traceback(redirect="capture") result = friendly.get_output() assert "unhashable type: 'list'" in result if friendly.get_lang() == "en": assert "consider using a `tuple`" in result return result, message
def test_no_curses(): try: import curses except ModuleNotFoundError as e: message = str(e) friendly.explain_traceback(redirect="capture") result = friendly.get_output() assert "No module named '_curses'" in result if friendly.get_lang() == "en": assert "The curses module is rarely installed with Python on Windows." in result return result, message
def test_Object_is_not_iterable(): try: list(42) except TypeError as e: friendly.explain_traceback(redirect="capture") message = str(e) result = friendly.get_output() assert "TypeError: 'int' object is not iterable" in result if friendly.get_lang() == "en": assert "An iterable is required here." in result return result, message
def test_Use_join_with_str(): try: a = ['a', '2'].join('abc') + ['b', '3'].join('\n') except AttributeError as e: message = str(e) friendly.explain_traceback(redirect="capture") result = friendly.get_output() assert "'list' object has no attribute 'join'" in result if friendly.get_lang() == "en": assert "something like `'abc'.join(['a', '2'])`" in result return result, message
def test_Custom_name(): try: python except NameError as e: message = str(e) friendly.explain_traceback(redirect="capture") result = friendly.get_output() assert "NameError: name 'python' is not defined" in result if friendly.get_lang() == "en": assert "You are already using Python!" in result return result, message
def test_Not_a_package_similar_name(): try: import os.pathh except ModuleNotFoundError as e: message = str(e) friendly.explain_traceback(redirect="capture") result = friendly.get_output() assert "No module named 'os.pathh'" in result if friendly.get_lang() == "en": assert "Did you mean `import os.path`" in result return result, message
def test_flush(): try: b = c except Exception: friendly.explain_traceback(redirect="capture") result = friendly.get_output(flush=False) assert "NameError: name 'c' is not defined" in result result1 = friendly.get_output() # flushes assert "NameError: name 'c' is not defined" in result1 result2 = friendly.get_output() # returns empty string assert not result2 return result, result2
def test_Need_to_install_module(): try: import alphabet except ModuleNotFoundError as e: message = str(e) friendly.explain_traceback(redirect="capture") result = friendly.get_output() assert "No module named 'alphabet'" in result if friendly.get_lang() == "en": assert "Perhaps you need to install it" in result return result, message
def test_Object_not_module(): try: import os.open except ModuleNotFoundError as e: message = str(e) friendly.explain_traceback(redirect="capture") result = friendly.get_output() assert "No module named 'os.open'" in result if friendly.get_lang() == "en": assert "Did you mean `from os import open`?" in result return result, message
def test_Simple_import_error(): try: from math import Pi except ImportError as e: message = str(e) friendly.explain_traceback(redirect="capture") result = friendly.get_output() assert "ImportError: cannot import name 'Pi'" in result if friendly.get_lang() == "en": assert "Did you mean `pi`" in result return result, message
def test_Annotated_variable(): try: y = x except NameError as e: message = str(e) friendly.explain_traceback(redirect="capture") result = friendly.get_output() assert "NameError: name 'x' is not defined" in result if friendly.get_lang() == "en": assert "x = 3" in result return result, message
def test_Generic(): try: this = something except NameError as e: message = str(e) friendly.explain_traceback(redirect="capture") result = friendly.get_output() assert "NameError: name 'something' is not defined" in result if friendly.get_lang() == "en": assert "In your program, `something` is an unknown name." in result return result, message
def test_Derive_from_BaseException(): try: raise "exception" # noqa except TypeError as e: message = str(e) friendly.explain_traceback(redirect="capture") result = friendly.get_output() assert "TypeError: exceptions must derive from BaseException" in result if friendly.get_lang() == "en": assert "In Python 3, exceptions must be derived from BaseException." in result return result, message
def test_Standard_library_module(): try: import Tkinter except ModuleNotFoundError as e: message = str(e) friendly.explain_traceback(redirect="capture") result = friendly.get_output() assert "No module named 'Tkinter'" in result if friendly.get_lang() == "en": assert "Did you mean `tkinter`" in result return result, message
def test_Builtin_has_no_len(): try: len("Hello world".split) except TypeError as e: friendly.explain_traceback(redirect="capture") message = str(e) result = friendly.get_output() assert "TypeError: object of type 'builtin_function_or_method' has no len()" if friendly.get_lang() == "en": assert 'Did you forget to call `"Hello world".split`?' in result return result, message
def test_Builtin_function(): text = 'Hello world!' try: len.text except AttributeError as e: message = str(e) friendly.explain_traceback(redirect="capture") result = friendly.get_output() assert "'builtin_function_or_method'" in result if friendly.get_lang() == "en": assert "Did you mean `len(text)`" in result return result, message
def test_Missing_nonlocal(): try: outer_missing_nonlocal() except UnboundLocalError as e: message = str(e) friendly.explain_traceback(redirect="capture") result = friendly.get_output() assert "local variable 'spam_missing_nonlocal' referenced" in result if friendly.get_lang() == "en": assert ("Did you forget to add `nonlocal spam_missing_nonlocal`?\n" in result) return result, message
def test_Generic(): d = {"a": 1, "b": 2} try: d["c"] except KeyError as e: message = str(e) friendly.explain_traceback(redirect="capture") result = friendly.get_output() assert "KeyError: 'c'" in result if friendly.get_lang() == "en": assert "that cannot be found is `c`." in result return result, message
def test_Date_invalid_month(): from datetime import date try: d = date(2021, 13, 1) except ValueError as e: message = str(e) friendly.explain_traceback(redirect="capture") result = friendly.get_output() assert "month must be in 1..12" in result if friendly.get_lang() == "en": assert "Valid values are integers, from 1 to 12" in result return result, message
def test_Complex_division(): zero = 0j try: 1 / zero except ZeroDivisionError as e: message = str(e) friendly.explain_traceback(redirect="capture") result = friendly.get_output() assert "ZeroDivisionError: complex division by zero" in result if friendly.get_lang() == "en": assert "You are dividing by the following term" in result return result, message
def test_Slice_indices_must_be_integers_or_None(): try: [1, 2, 3][1.0:2.0] except TypeError as e: message = str(e) friendly.explain_traceback(redirect="capture") result = friendly.get_output() assert ("TypeError: slice indices must be integers or None " "or have an __index__ method") in result if friendly.get_lang() == "en": assert "When using a slice to extract a range of elements" in result return result, message
def test_Empty(): a = [] try: c = a[1] except IndexError as e: message = str(e) friendly.explain_traceback(redirect="capture") result = friendly.get_output() assert "IndexError: list index out of range" in result if friendly.get_lang() == "en": assert "contains no item" in result return result, message
def test_Circular_import(): try: import circular_a except ImportError as e: message = str(e) friendly.explain_traceback(redirect="capture") result = friendly.get_output() # The actual message varies a lot depending on Python version. if friendly.get_lang() == "en": assert "what is known as a 'circular import'" in result return result, message
def test_Divmod(): zero = 0 try: divmod(1, zero) except ZeroDivisionError as e: message = str(e) friendly.explain_traceback(redirect="capture") result = friendly.get_output() assert "ZeroDivisionError: integer division or modulo by zero" in result if friendly.get_lang() == "en": assert "The second argument of the `divmod()`" in result return result, message
def test_Float_modulo(): zero = 0. try: 1 % zero except ZeroDivisionError as e: message = str(e) friendly.explain_traceback(redirect="capture") result = friendly.get_output() assert "ZeroDivisionError: float modulo" in result if friendly.get_lang() == "en": assert "Using the modulo operator" in result return result, message
def test_Too_many_values_to_unpack(): c = [1, 2, 3] try: a, b = c except ValueError as e: message = str(e) friendly.explain_traceback(redirect="capture") result = friendly.get_output() assert "ValueError: too many values to unpack (expected 2)" in result if friendly.get_lang() == "en": assert "a `list` of length 3" in result return result, message
def test_Raise_zero_negative_power(): zero = 0 try: zero**-1 except ZeroDivisionError as e: message = str(e) friendly.explain_traceback(redirect="capture") result = friendly.get_output() assert "cannot be raised to a negative power" in result if friendly.get_lang() == "en": assert "You are attempting to raise the number 0 to a negative power" in result return result, message
def test_Cannot_unpack_non_iterable_object(): try: a, b = 42.0 except TypeError as e: friendly.explain_traceback(redirect="capture") message = str(e) result = friendly.get_output() assert ("TypeError: cannot unpack non-iterable float object" in result or "TypeError: 'float' object is not iterable" in result) if friendly.get_lang() == "en": assert "An iterable is an object capable" in result return result, message
def test_Generic(): try: raise MyException( "Some informative message about an unknown exception.") except Exception as e: message = str(e) friendly.explain_traceback(redirect="capture") result = friendly.get_output() assert "Some informative message" in result if friendly.get_lang() == "en": assert "No information is known about this exception." in result return result, message
def test_Integer_division_operator(): zero = 0 try: 1 // zero except ZeroDivisionError as e: message = str(e) friendly.explain_traceback(redirect="capture") result = friendly.get_output() assert "ZeroDivisionError: integer division or modulo by zero" in result if friendly.get_lang() == "en": assert "You are dividing by the following term" in result return result, message