Меню

Как исправить ошибку e128 python

Вопрос:

У меня есть это утверждение как несколько строк:

    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, как я.

Все самое лучшее.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Как исправить ошибку e05 на принтере canon mp280
  • Как оценивается тотальный диктант сколько ошибок