Python: Pep8 E128 ошибка отступов... как это может быть в стиле?
У меня есть это утверждение как несколько строк:
return render_to_response('foo/page.html',
{
'situations': situations,
'active': active_req,
},
context_instance=RequestContext(request))
Как и в случае с PEP8 script, он дает мне ошибку "E128: продолжение линии с отступом для визуального отступа" во второй строке.
Я пробовал целую кучу разных способов форматирования, и единственный способ заставить PEP8 перестать жаловаться:
return render_to_response('foo/page.html', {
'situations': situations,
'active': active_req,
},
context_instance=RequestContext(request))
Но это похоже на мусор.
Предложения? E124, E126 и E128 кажутся огромной болью!
Я не против решений, которые имеют {
в первой строке (или на ней), но я надеюсь, что там есть решение, где },
и context_instance...
находятся на одинаковом уровне отступов.
Ответы
Ответ 1
Проблема заключается в том, что все параметры должны быть отступом до одного уровня. Это включает в себя любой параметр в строке вызова начальной функции.
Итак, хотя вы можете исправить это следующим образом:
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)
Ответ 2
Я уверен, что он хочет, чтобы вы отступали все от начальных парнеров (если вам нужен параметр там) - т.е.
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)
Ответ 3
Вы когда-нибудь пробовали django-annoying?
вы можете сделать это...
@render_to('foo/page.html')
def bar(request):
return {'situations': situations,
'active': active_req,}
Я думаю, что это чище, и это может помочь вам с стилем PEP8...