In python assert, how to print the condition when the assertion failed?

330
February 14, 2018, at 3:21 PM

In Python, I can do:

assert result==100, "result should be 100"

but this is redundant since I have to type the condition twice.

Is there a way to tell Python to automatically show the condition when the assertion fails?

Answer 1

With pure Python, you can't reproduce the condition of the assertion automatically easily. The pytest testing framework does exactly what you want, but the implementation for this magic is everything but trivial. In short, pytest rewrites the code of your assertions to complex code to capture the information needed to generate the desired error message.

Answer 2

From Jupyter notebook

This happens with traceback. For example:

x = 2
assert x < 1
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
<ipython-input-5-0662b7144a79> in <module>()
      1 x = 2
----> 2 assert x < 1
AssertionError: 

However, it is good practice to humanize (i.e. explain in words) why this error occurs. Often, I use it to feed back useful information. For example:

x = 2
assert x < 1, "Number is not less than 1: {0}".format(x)
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
<ipython-input-4-bd4b9b15ccc2> in <module>()
      1 x = 2
----> 2 assert x < 1, "Number is not less than 1: {0}".format(x)
AssertionError: Number is not less than 1: 2

From command line

This still happens with traceback. For example:

H:\>python assert.py
Traceback (most recent call last):
  File "assert.py", line 1, in <module>
    assert 2 < 1
AssertionError

Solution for all environments

Use the traceback module. For details, see answer at How to handle AssertionError in Python and find out which line or statement it occurred on?

Rent Charter Buses Company
READ ALSO
Python 3.6 openurl behaviour is different in windows OS

Python 3.6 openurl behaviour is different in windows OS

I'm a beginner in python language

285
spaCy custom parser for chat intent semantics

spaCy custom parser for chat intent semantics

Does the spaCy's parser for custom semantics (train_intent_parserpy) example work for multiple ATTRIBUTEs?

257
Python create multi-dimensional dictionary using list comprehensions

Python create multi-dimensional dictionary using list comprehensions

I have dictionary in the following format:

218
Return JSON objects retrieved from Slack with Django REST

Return JSON objects retrieved from Slack with Django REST

I set up a Django REST API with Slack so I could program a support botIt's working fine in that I can program new messages and responses

244