Как отформатировать оператор утверждения python, который соответствует PEP8?

Как форматировать длинное утверждение assert, которое соответствует PEP8? Пожалуйста, проигнорируйте придуманный характер моего примера.

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

Нельзя заключить его в круглые скобки, поскольку это изменяет поведение оператора assert, поскольку оно является ключевым словом, а не встроенной функцией.

Ответ 1

Важно помнить, что PEP8 является лишь ориентиром, а даже утверждает, что бывают случаи, когда правила должны быть прерваны.

Но самое главное: знать, когда быть непоследовательным - иногда руководство по стилю просто не применяется.

С учетом этого, я бы, вероятно, написал это со старым продолжением строки стиля:

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

Если это не подходит вам (или вашему linter), вы всегда можете:

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

или даже:

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

Ответ 2

ERR_MESSAGE_01 = '''
Some really long error message
'''

assert condition(a,b), ERR_MESSAGE_01

Как я это делаю... и я думаю, что это прекрасно...

Ответ 3

Стоит отметить, что можно скопировать круглые скобки, просто не так, как вы думаете.

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

Я бы не стал спорить, что это особенно читаемо. В некоторых случаях это может быть правильный вариант.

Ответ 4

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

Это дает вам подразумеваемое продолжение строки из круглых скобок, которое рекомендуется PEP 8 без нарушения поведения assert.

В качестве альтернативы:

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