-
Notifications
You must be signed in to change notification settings - Fork 299
Closed
Labels
Milestone
Description
When trying to raise Mismatch exceptions for non-string arguments, the first and last character of the string representation of the value are truncated, occasionally resulting in very cryptic error messages. Here are some examples.
>>> import check50
>>> raise check50.Mismatch(True, False)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
check50._api.Mismatch: expected "ru", not "als"
>>> raise check50.Mismatch([], "")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
check50._api.Mismatch: expected "", not ""
>>> raise check50.Mismatch(10, 20)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
check50._api.Mismatch: expected "", not ""
If the Mismatch exception class only allows string arguments, I believe this should explicitly be documented.
Additionally, while testing I ran into the following (related?) issue: once a Mismatch object has been created (but not raised), raising another Mismatch object causes a different (presumably unintended) exception.
>>> import check50
>>> check50.Mismatch("foo", "bar")
Mismatch('foo', 'bar')
>>> raise check50.Mismatch("baz", "lud")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/mees/.local/lib/python3.6/site-packages/check50/_api.py", line 405, in __init__
super().__init__(rationale=_("expected {}, not {}").format(_raw(expected), _raw(actual)), help=help)
TypeError: 'Mismatch' object is not callable