web-dev-qa-db-ja.com

「視覚的なインデントのために継続行がインデントされていない」エラーが発生する

continuation line under-indented for visual indent以下のコードのエラー:

    command = 'ffmpeg -i downloaded.mp4 -codec:v libx264 -codec:a \
            aac -map 0 -f ssegment -segment_format mpegts \
            -segment_list %s/%skbps.m3u8 -segment_time 10 \
            %s/%skbps_%%03d.ts' % (path, options['video_bitrate'],
                path, options['video_bitrate'])

エラーを削除するには、このコードをどのようにフォーマットする必要がありますか?

6
wanghaoming

このケースは PEP-8 でカバーされています。要約すると、これを修正するには、括弧内の行をインデントするときに、次の行を開き括弧の後にある文字に揃える必要があります。たとえば、括弧内のコードを続行する場合は、これを行う必要があります。

foo(a, b, c, 
    d, e)

あなたは現在このようにやっています。

foo(a, b, c, 
  d, e)

インデントを修正するには、次のようにする必要があります。

command = 'ffmpeg -i downloaded.mp4 -codec:v libx264 -codec:a \
           aac -map 0 -f ssegment -segment_format mpegts \
           -segment_list %s/%skbps.m3u8 -segment_time 10 \
           %s/%skbps_%%03d.ts' % (path, options['video_bitrate'],
                                  path, options['video_bitrate'])

Stephen Rauchの回答から、これにももう少しあることに気づいたかもしれません。スラッシュを使用して行の継続を行う代わりに、行全体を括弧で囲んでから、行を文字列に分割することができます。pythonは、隣接する文字列リテラルを自動的に結合します。たとえば、文字列があり、これは前に。

greeting = 'Hello, \
            World!'

代わりにこれを行う必要があります。

greet = ('Hello, '
         'World!')

この方法は、はるかに読みやすく、作業しやすくなります。また、括弧線を継続するための別のPEP-8承認済みの方法があることに注意してください。する代わりに。

foo(a, b, c, 
    d, e)

これを行うこともできます。

foo(
    a, b, c, 
    d, e)

これを行うには、開き括弧の後に最初の行を空白のままにしてから、現在のブロックからインデントして継続を開始する必要があります。この編集があなたの理解をさらに深めることを願っています。 pythonスタイルについて詳しく知りたい場合は、PEPガイドに簡単に読んでもらいます(これらはpythonコードの標準です)。

13
Jamie C

文字列の継続を行う場合、暗黙的(または明示的)な文字列連結を使用することをお勧めします。これにより、作成された文字列をより適切に制御できます。また、文字列が括弧で囲まれている場合、継続文字は必要ありません。

command = ('ffmpeg -i downloaded.mp4 -codec:v libx264 -codec:a '
           'aac -map 0 -f ssegment -segment_format mpegts '
           '-segment_list %s/%skbps.m3u8 -segment_time 10 '
           '%s/%skbps_%%03d.ts' % (
               path, options['video_bitrate'],
               path, options['video_bitrate']))

補足: pycharm は、エディターでpep8違反をライブハイライトするという非常に優れた機能を備えています。

2
Stephen Rauch