web-dev-qa-db-ja.com

Python:Pep8 E128インデントエラー...これをスタイル設定するにはどうすればよいですか?

私はこの声明を数行として持っています:

    return render_to_response('foo/page.html',
        {
            'situations': situations,
            'active': active_req,
        },
        context_instance=RequestContext(request))

現状では、PEP8スクリプトを使用すると、2行目に「E128:視覚的インデントのためにインデントされていない継続行」エラーが表示されます。

私はさまざまなフォーマット方法を試しましたが、PEP8に文句を言わないようにする唯一の方法は次のとおりです。

    return render_to_response('foo/page.html', {
        'situations': situations,
        'active': active_req,
    },
        context_instance=RequestContext(request))

しかし、これはゴミのように見えます。

提案? E124、E126、E128は大変な苦痛のようです!

最初の行に{がある(またはそれ自体で)ソリューションは問題ありませんが、},context_instance...が同じインデントレベルにあるソリューションがあることを願っています。

19
Joseph

問題は、すべてのパラメーターが同じレベルにインデントされることになっていることです。これには、最初の関数呼び出し行のパラメーターが含まれます。

だから、あなたができたこのようにそれを修正している間:

return render_to_response('foo/page.html',
                          {
                              'situations': situations,
                              'active': active_req,
                          },
                          context_instance=RequestContext(request))

…通常、80列のルールに違反するだけで、pep8が文句を言わなくても、コードが醜くなります。あなたがおそらく欲しいのはこれです:

return render_to_response(
    'foo/page.html',
    {
        'situations': situations,
        'active': active_req,
    },
    context_instance=RequestContext(request))

または、もちろん、巨大な表現を分割することもできます。

d = {
    'situations': situations,
    'active': active_req,
}
context = RequestContext(request)
return render_to_response('foo/page.html', d, context_instance=context)
21
abarnert

すべてを最初の親にインデントする必要があると確信しています(そこにパラメーターが必要な場合)-つまり、.

return render_to_response('foo/page.html',
                          {
                              'situations': situations,
                              'active': active_req,
                          },
                          context_instance=RequestContext(request))

さもないと、

return render_to_response(
    'foo/page.html',
    {
        'situations': situations,
        'active': active_req,
    },
    context_instance=RequestContext(request))

また、合法である必要があります。

またはそのようなもの。適切なインデント方法については、 pep docs を参照してください。

通りすがりの放浪者のための、仕様からの関連する例は次のとおりです。

Yes:

# Aligned with opening delimiter
foo = long_function_name(var_one, var_two,
                         var_three, var_four)

# More indentation included to distinguish this from the rest.
def long_function_name(
        var_one, var_two, var_three,
        var_four):
    print(var_one)
No:

# Arguments on first line forbidden when not using vertical alignment
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
Optional:

# Extra indentation is not necessary.
foo = long_function_name(
  var_one, var_two,
  var_three, var_four)
4
vroomfondel

Django-迷惑 で試したことはありますか?

あなたはこれを行うことができます...

@render_to('foo/page.html')
def bar(request):
    return {'situations': situations,
            'active': active_req,}

これはよりクリーンで、PEP8スタイルに役立つと思います...

4
MemoGarcia