1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
import friendly_traceback
def multiple_choices():
try:
from math import bsin
except ImportError:
friendly_traceback.explain_traceback(redirect="capture")
result = friendly_traceback.get_output()
assert "ImportError: cannot import name 'bsin'" in result
if friendly_traceback.get_lang() == "en":
assert "Did you mean one of the following:" in result
assert "sin, asin" in result or "asin, sin" in result
def no_suggestion():
try:
from math import alphabet_alphabet
except ImportError:
friendly_traceback.explain_traceback(redirect="capture")
result = friendly_traceback.get_output()
assert "ImportError: cannot import name 'alphabet_alphabet'" in result
if friendly_traceback.get_lang() == "en":
assert "could not be imported is `alphabet_alphabet`" in result
def multiple_import_on_same_line():
try:
import circular_a, circular_b
except ImportError:
friendly_traceback.explain_traceback(redirect="capture")
result = friendly_traceback.get_output()
assert "cannot import name 'a'" in result
if friendly_traceback.get_lang() == "en":
assert "likely caused by what is known as a 'circular import'." in result
def wrong_case():
try:
from math import PI
except ImportError:
friendly_traceback.explain_traceback(redirect="capture")
result = friendly_traceback.get_output()
if friendly_traceback.get_lang() == "en":
assert "Did you mean `pi`" in result
def test_Simple_import_error():
multiple_choices() # do not record in documentation
no_suggestion()
multiple_import_on_same_line()
wrong_case()
try:
from math import Pi
except ImportError as e:
message = str(e)
friendly_traceback.explain_traceback(redirect="capture")
result = friendly_traceback.get_output()
assert "ImportError: cannot import name 'Pi'" in result
if friendly_traceback.get_lang() == "en":
assert "Did you mean `pi`" in result
if friendly_traceback._writing_docs:
return result, message
# The following test has become unreliable when running under pytest.
# def test_Circular_import():
#
# try:
# import circular_a
# except ImportError as e:
# message = str(e)
# friendly_traceback.explain_traceback(redirect="capture")
# else:
# message = "Message was never set."
# result = friendly_traceback.get_output()
# # The actual message varies a lot depending on Python version.
#
# if friendly_traceback.get_lang() == "en":
# assert friendly_traceback.utils.expected_in_result("what is known as a 'circular import'", result)
#
# if friendly_traceback._writing_docs:
return result, message
if __name__ == "__main__":
print(test_Simple_import_error()[0])
|