我在下面的代码中遇到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'])
如何格式化此代码以删除错误?
答案 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违规功能。