Вопрос:
У меня есть это утверждение как несколько строк:
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... находятся на одинаковом уровне отступов.
Лучший ответ:
Проблема заключается в том, что все параметры должны быть отступом до одного уровня. Это включает в себя любой параметр в строке вызова начальной функции.
Итак, хотя вы можете исправить это следующим образом:
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
Я уверен, что он хочет, чтобы вы отступали все от начальных парнеров (если вам нужен параметр там) – т.е.
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
Вы когда-нибудь пробовали django-annoying?
вы можете сделать это…
@render_to('foo/page.html')
def bar(request):
return {'situations': situations,
'active': active_req,}
Я думаю, что это чище, и это может помочь вам с стилем PEP8…
Проблема заключается в том, что все параметры должны быть отступом до одного уровня. Это включает в себя любой параметр в строке вызова начальной функции.
Итак, хотя вы можете исправить это следующим образом:
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)
Просто открыл файл с помощью Sublime Text (с помощью Sublime Linter) и заметил ошибку форматирования PEP8, которую я никогда раньше не видел. Вот текст:
urlpatterns = patterns('',
url(r'^$', listing, name='investment-listing'),
)
Он помечает второй аргумент, строку, которая начинается url(...)
Я собирался отключить эту проверку в ST2, но я хотел бы знать, что я делаю неправильно, прежде чем я проигнорирую это. Вы никогда не знаете, если это кажется важным, я мог бы даже изменить свои пути 🙂
Ответы:
PEP-8 рекомендует использовать отступы для открывающих скобок, если вы помещаете что-либо в первую строку, поэтому он должен иметь отступ для открывающей скобки:
urlpatterns = patterns('',
url(r'^$', listing, name='investment-listing'))
или не ставить какие-либо аргументы в стартовой строке, а затем делать отступы до единого уровня:
urlpatterns = patterns(
'',
url(r'^$', listing, name='investment-listing'),
)
urlpatterns = patterns(
'', url(r'^$', listing, name='investment-listing'))
Я предлагаю прочитать PEP-8 — вы можете пролистать многие из них, и это довольно легко понять, в отличие от некоторых более технических PEP.
Это также относится к таким утверждениям (автоматически отформатированным PyCharm):
return combine_sample_generators(sample_generators['train']),
combine_sample_generators(sample_generators['dev']),
combine_sample_generators(sample_generators['test'])
Который даст такое же стиль-предупреждение. Чтобы избавиться от него, мне пришлось переписать его так:
return
combine_sample_generators(sample_generators['train']),
combine_sample_generators(sample_generators['dev']),
combine_sample_generators(sample_generators['test'])
PEP-8 рекомендует делать отступ строк до открывающих скобок, если вы помещаете что-либо в первую строку, поэтому он должен быть отступом до открывающей скобки:
urlpatterns = patterns('',
url(r'^$', listing, name='investment-listing'))
или не помещать никаких аргументов в начальную строку, а затем делать отступы до единого уровня:
urlpatterns = patterns(
'',
url(r'^$', listing, name='investment-listing'),
)
urlpatterns = patterns(
'', url(r'^$', listing, name='investment-listing'))
Я предлагаю прочитать PEP-8 — вы можете просмотреть многое, и это довольно легко понять, в отличие от некоторых более технических PEP.
Это также относится к таким операторам (автоматически форматируется PyCharm):
return combine_sample_generators(sample_generators['train']),
combine_sample_generators(sample_generators['dev']),
combine_sample_generators(sample_generators['test'])
Что даст такое же предупреждение о стиле. Чтобы избавиться от него, мне пришлось переписать его так:
return
combine_sample_generators(sample_generators['train']),
combine_sample_generators(sample_generators['dev']),
combine_sample_generators(sample_generators['test'])
Просто открыл файл с Sublime Text (с Sublime Linter) и заметил ошибку форматирования PEP8, которую я никогда раньше не видел. Вот текст:
urlpatterns = patterns('',
url(r'^$', listing, name='investment-listing'),
)
Он помещает второй аргумент, строка, начинающаяся с url(...)
Я собирался отключить эту проверку в ST2, но Я хотел бы знать, что я делаю неправильно, прежде чем игнорировать его. Вы никогда не знаете, если это кажется важным, я могу даже изменить свои пути:)
Ответ 1
PEP-8 рекомендует вы отступать строки к открывающим круглым скобкам, если вы помещаете что-либо в первую строку, поэтому оно должно быть отступом к открывающей скобке:
urlpatterns = patterns('',
url(r'^$', listing, name='investment-listing'))
или не помещать какие-либо аргументы в стартовую строку, а затем отступы до равномерного уровня:
urlpatterns = patterns(
'',
url(r'^$', listing, name='investment-listing'),
)
urlpatterns = patterns(
'', url(r'^$', listing, name='investment-listing'))
Я предлагаю прочитать прочитанный PEP-8 — это не длинный документ, и его довольно легко понять, в отличие от некоторых из более технических PEP.
Ответ 2
Я новый ученик Python, и это меня очень расстраивало, потому что мне нравился чистый код, и я хочу с самого начала развивать хорошие привычки:
Ничего не работало для меня, кроме:
my_example = input(
"This is a long sentence that I have broken "
"across lines to satisfy PEP 8 / E128.")
Это работало очень хорошо для меня. Нет анонимных ошибок PEP 8/E128 от Anaconda в Sublime Text, и код работает так, как должен.
Надеюсь, это поможет кому-то, кто «свеж» с Py, как я.
Все самое лучшее.