Example #1
0
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
Example #3
0
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
Example #5
0
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
Example #7
0
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
Example #10
0
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
Example #11
0
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
Example #12
0
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
Example #13
0
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
Example #15
0
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
Example #16
0
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
Example #18
0
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
Example #19
0
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
Example #20
0
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
Example #21
0
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
Example #22
0
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
Example #23
0
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
Example #24
0
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
Example #25
0
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
Example #26
0
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
Example #27
0
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
Example #28
0
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
Example #29
0
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
Example #30
0
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