web-dev-qa-db-ja.com

Python、PEP-8、E122継続行にインデントがないか、インデントがあります

このエラーが発生しますが、インデントすることを選択しましたが、それでも発生します。理由を知っていますか?

if len(argmaxcomp) == 1:
    print "The complex with the greatest mean abundance is: {0}"\
    .format(argmaxcomp[0])
6
user132290

一般に、pep8はあなたを示唆しています 継続行よりも括弧を優先します

長い行を折り返すための推奨される方法は、括弧、角かっこ、中括弧内でPythonの暗黙の行継続を使用することです。式を括弧で囲むことにより、長い行を複数の行に分割できます。これらは、行の継続に円記号を使用するよりも優先して使用する必要があります。

あれは:

if len(argmaxcomp) == 1:
    print("The complex with the greatest mean abundance is: {0}"
          .format(argmaxcomp[0]))

別のオプションは、python 3's print:

from __future__ import print_function

if len(argmaxcomp) == 1:
    print("The complex with the greatest mean abundance is:", argmaxcomp[0])

注:print_functionは、残りのコードを壊す/更新する必要がある場合があります... printを使用した場所ならどこでも

6
Andy Hayden

PEP8の1つのセクション は次のようになります。

長い行を折り返すための推奨される方法は、括弧、角かっこ、中括弧内でPythonの暗黙の行継続を使用することです。式を括弧で囲むことにより、長い行を複数の行に分割できます。これらは、行の継続に円記号を使用するよりも優先して使用する必要があります。

バックスラッシュが適切な場合もあります。たとえば、-ステートメントを含む長い複数のステートメントは暗黙的な継続を使用できないため、バックスラッシュを使用できます

これは、(これはPEP8-E122とは関係ありませんが)バックスラッシュを使用する代わりに括弧でラップする必要があることを意味し、暗黙の行継続(インデント)が開始ブラケットになります。

if len(argmaxcomp) == 1:
    print("The complex with the greatest mean abundance is: {0}"
          .format(argmaxcomp[0]))
#         ^--------- The bracket opens here

パランセシスが不可能であるためにバックスラッシュが許容される場合に言及されている例外は2つだけです(これらのコンテキストでは別の意味があるため)。

  • マルチ-with
  • asserts

ただし、本当にバックスラッシュが必要な場合(python2でのみ可能)、最初の式と同じインデントを付ける必要があります。

if len(argmaxcomp) == 1:
    print "The complex with the greatest mean abundance is: {0}" \
          .format(argmaxcomp[0])
#         ^--------- The first expression starts here
0
MSeifert

上記のエラーは発生しませんでしたが、以下のタイプを試しました。確認できるように、エラーを付けて投稿してください。

In [6]: argmaxcomp = [100]

In [7]: if len(argmaxcomp) == 1:
   ...:     print 'val: {0}'\
   ...:     .format(argmaxcomp[0])
   ...:     
val: 100

In [8]: if len(argmaxcomp) == 1:
   ...:     print 'val: {0}'.format(argmaxcomp[0])
   ...:     
val: 100

In [9]: if len(argmaxcomp) == 1:
   ...:     print 'val: {0}'.format(
   ...:     argmaxcomp[0])
   ...:     
val: 100
0
Muthuvel

この場合の問題は、インデントがまったくなく、明らかに最後の行でエラーが発生することです。括弧がオプションでない場合は、以下のようにインデントを追加してください。

if len(argmaxcomp) == 1:
    print "The complex with the greatest mean abundance is: {0}" \
        .format(argmaxcomp[0])

どんな量のスペースでも機能しますが、何が好ましいかわかりません。

0
st0ne

同様の問題が発生し、解決しました。 OPのコードの問題は、継続行の間に空白がある可能性があることだと思います。\n以外は何もないはずです。

0
Malik A. Rumi