我收到 'continuation line under-indented for visual indent' 错误

I get 'continuation line under-indented for visual indent' error

我在以下代码中遇到 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)

为此,您必须在左括号后将第一行留空,然后您必须从当前块缩进以开始继续。我希望这次编辑能进一步加深您的理解。如果您想了解更多关于 python 风格的信息,请快速阅读 PEP 指南(它们是 python 代码的标准)。

在继续字符串时,使用隐式(或显式)字符串连接通常是一种很好的做法。这可以更好地控制创建的字符串。此外,如果字符串被括号括起来,则不需要连续字符:

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 违规行为。