57

如何格式化符合 PEP8 的长断言语句?请忽略我的例子的人为性质。

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

不能将它包装在括号中,因为这会改变 assert 语句的行为,因为它是关键字,而不是内置函数。

4

5 回答 5

79
于 2013-04-17T16:36:51.163 回答
7
ERR_MESSAGE_01 = '''
Some really long error message
'''

assert condition(a,b), ERR_MESSAGE_01

我是怎么做的……我认为这很好……

于 2013-04-17T16:37:26.587 回答
5

值得注意的是,可以用括号括起来,只是不是按照您的想法。

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

但是,我不认为它特别具有可读性。在某些情况下,它可能是正确的选择。

于 2013-04-17T16:42:14.607 回答
2

这在最大行长度部分末尾的 pep8 中进行了描述。

反斜杠有时可能仍然合适。例如,[...] 另一个这样的情况是断言语句。

所以 pep8 的建议是像 mgilsons 的第一个例子那样做,例如:

def afunc(some_param_name):
    assert isinstance(some_param_name, SomeClassName), \ 
           'some_param_name must be an instance of SomeClassName, silly goose!'
于 2020-08-11T14:32:42.967 回答
1
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!')
于 2013-04-17T16:44:41.400 回答