我得到'延续线缩进为视觉缩进'错误

时间:2017-01-10 05:48:25

标签: python pep8

我在下面的代码中遇到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'])

如何格式化此代码以删除错误?

2 个答案:

答案 0 :(得分:13)

此案例包含在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代码的标准)。

答案 1 :(得分:2)

在继续执行字符串时,通常使用隐式(或显式)字符串连接是一种好习惯。这样可以更好地控制创建的字符串。此外,如果字符串带括号,则不需要连续字符:

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违规功能。