Как отформатировать утверждение python assert, соответствующее 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, поскольку это ключевое слово, а не встроенная функция.
5 ответов
Важно помнить, что PEP8 является лишь руководством и даже утверждает, что бывают случаи, когда правила должны быть нарушены.
Но самое главное: знать, когда нужно быть непоследовательным - иногда руководство по стилю просто не применяется.
Имея это в виду, я, вероятно, написал бы это со старым продолжением линии стиля:
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!')
или даже:
def afunc(some_param_name):
assert isinstance(some_param_name, SomeClassName), (
'some_param_name must be an instance of SomeClassName, '
'silly goose!')
ERR_MESSAGE_01 = '''
Some really long error message
'''
assert condition(a,b), ERR_MESSAGE_01
Вот как я это делаю... и я думаю, что это хорошо..
Стоит отметить, что можно заключить в скобки, но не так, как вы думаете.
assert isinstance(some_param_name,
SomeClassName), ('some_param_name must be an instance of '
'SomeClassName, silly goose!')
Однако я бы не стал утверждать, что это особенно читабельно. В некоторых случаях это может быть правильным вариантом.
Это описано в 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!'
def afunc(some_param_name):
assert (isinstance(some_param_name, SomeClassName)
), 'some_param_name must be an instance of SomeClassName, silly goose!'
Это дает вам подразумеваемое продолжение строки из круглых скобок, которое рекомендуется в PEP 8 без нарушения поведения утверждения.
В качестве альтернативы:
def afunc(some_param_name):
assert isinstance(some_param_name, SomeClassName), (
'some_param_name must be an instance of SomeClassName, silly goose!')
+1 для def afunc(some_param_name): assert isinstance(some_param_name, SomeClassName), ( 'some_param_name должно быть экземпляром SomeClassName, глупый гусь!')