web-dev-qa-db-ja.com

python PEP8に準拠する表明ステートメントをフォーマットする方法は?

PEP8に準拠する長いassertステートメントをどのようにフォーマットしますか?私の例の不自然な性質は無視してください。

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

これは組み込み関数ではなくキーワードであるため、assertステートメントの動作が変更されるため、括弧で囲むことはできません。

36
stantonk

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!')
56
mgilson
ERR_MESSAGE_01 = '''
Some really long error message
'''

assert condition(a,b), ERR_MESSAGE_01

私がそれをする方法です...そして私はそれがうまく順応すると思います...

6
Joran Beasley

あなたが考えている方法ではなく、括弧で囲むことが可能であることは注目に値します。

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

ただし、特に読みやすいとは言えません。場合によっては、それが適切なオプションになることがあります。

4
Gareth Latty
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
Andrew Clark