Python:Pep8 E128压痕错误......这怎么样?

时间:2013-08-28 20:50:05

标签: python coding-style formatting pep8

我将此声明作为几行:

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

就目前而言,使用PEP8脚本,它在第二行给出了“E128:视觉缩进下缩进的延续线”错误。

我尝试过一系列不同的格式化方法,而且我能让PEP8停止抱怨的唯一方法是:

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

但这看起来像垃圾。

连连呢? E124,E126和E128似乎是一个巨大的痛苦!

我不介意在第一行(或者它自己)上有{的解决方案,但是我希望有一个解决方案},context_instance...位于相同的缩进级别。

3 个答案:

答案 0 :(得分:21)

问题是所有参数都应该缩进到同一级别。这包括初始函数调用行上的任何参数。

所以,当你可以修复它时:

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)

答案 1 :(得分:4)

我很确定它要你把所有内容缩进开头(如果你需要一个参数) - 即

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)

答案 2 :(得分:4)

您曾尝试使用django-annoying吗?

你可以这样做......

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

我认为这更干净,它可以帮助您使用PEP8风格......