1. ホーム
  2. python

[解決済み] ビジュアルインデントのため、継続行がアンダーインデントになっています」エラーが発生する

2022-02-12 17:13:52

質問内容

を取得します。 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'])

このコードをどのようにフォーマットすれば、エラーを取り除くことができますか?

どのように解決するのですか?

このケースは 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)

そのためには、冒頭の括弧の後の最初の行を空白にし、現在のブロックからインデントして続きを始めなければなりません(MUST)。この編集で、あなたの理解がさらに深まることを願っています。Pythonのスタイルについてもっと学びたいなら、PEPガイドをざっと読んでみてください(Pythonのコードの標準になっています)。