How to format a python assert statement that complies with PEP8?

Question:

How does one format a long assert statement that complies with PEP8? Please ignore the contrived nature of my example.

def afunc(some_param_name):
    assert isinstance(some_param_name, SomeClassName), 'some_param_name must be an instance of SomeClassName, silly goose!'

One cannot wrap it in parenthesis, because that changes the behavior of the assert statement since it is a keyword, not a builtin function.

Asked By: stantonk

||

Answers:

It’s important to remember that PEP8 is only a guideline and even states that there are times when the rules should be broken.

But most importantly: know when to be inconsistent — sometimes the style guide just doesn’t apply.

With that in mind, I would probably write this with old style line continuation:

def afunc(some_param_name):
    assert isinstance(some_param_name, SomeClassName),  
           'some_param_name must be an instance of SomeClassName, silly goose!'

If that doesn’t sit well with you (or your linter), you can always do:

def afunc(some_param_name):
    assert isinstance(some_param_name, SomeClassName), ( 
           'some_param_name must be an instance of SomeClassName, silly goose!')

or even:

def afunc(some_param_name):
    assert isinstance(some_param_name, SomeClassName), ( 
           'some_param_name must be an instance of SomeClassName, '
           'silly goose!')
Answered By: mgilson
ERR_MESSAGE_01 = '''
Some really long error message
'''

assert condition(a,b), ERR_MESSAGE_01

Is how I do it …and I think that complies fine ..

Answered By: Joran Beasley

It’s worth noting that it is possible to wrap with parenthesis, just not in the way you are thinking.

assert isinstance(some_param_name, 
                  SomeClassName), ('some_param_name must be an instance of '
                                   'SomeClassName, silly goose!')

I wouldn’t argue it’s particularly readable, however. In some cases, it might be the right option.

Answered By: Gareth Latty
def afunc(some_param_name):
    assert (isinstance(some_param_name, SomeClassName)
            ), 'some_param_name must be an instance of SomeClassName, silly goose!'

This gives you the implied line continuation from parentheses that is recommended by PEP 8 without breaking the assert behavior.

Alternatively:

def afunc(some_param_name):
    assert isinstance(some_param_name, SomeClassName), (
           'some_param_name must be an instance of SomeClassName, silly goose!')
Answered By: Andrew Clark

This is described in pep8 in the end of the Maximum Line Length section.

Backslashes may still be appropriate at times. For example, […] Another such case is with assert statements.

So the pep8 recommendation is to do as mgilsons first example, e.g.:

def afunc(some_param_name):
    assert isinstance(some_param_name, SomeClassName),  
           'some_param_name must be an instance of SomeClassName, silly goose!'
Answered By: Olsgaard
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.