在python中,具有垂直方向的字符串列表是很常见的。例如:
subprocess.check_output( [
'application',
'-first-flag',
'-second-flag',
'-some-additional-flag'
] )
这看起来不错,可读,不违反80栏规则......但如果错过了逗号,就像这样:
subprocess.check_output( [
'application',
'-first-flag' # missed comma here
'-second-flag',
'-some-additional-flag'
] )
Python仍然会通过连接两个stings来假设此代码有效:(。是否有可能以某种方式保护自己免受此类拼写错误,同时仍然使用垂直方向的字符串列表并且没有膨胀代码(例如包围str()
内的每个项目)?
答案 0 :(得分:5)
你可以在空格之后的行尾添加逗号,如下所示:
subprocess.check_output( [
'application' ,
'-first-flag' ,
'-second-flag' ,
'-some-additional-flag' ,
] )
这样做看起来有点糟糕,但如果你错过任何争论,很容易发现。
答案 1 :(得分:4)
你可以将每个字符串包装在parens中:
subprocess.check_output( [
('application'),
('-first-flag'),
('-second-flag'),
('-some-additional-flag'),
] )
顺便说一句,Python可以使用尾随逗号,所以只需在行尾使用逗号,这样也可以减少错误。
答案 2 :(得分:3)
也许是这个特殊情况:
arglist = 'application -first-flag -second-flag -some-additional-flag'
arglist = arglist.split()
subprocess.check_output(arglist)
或者,如果您发现自己编写了许多这样的唯一列表,请创建一个将行连接成列表形式的宏,这样就可以避免手动输入逗号。
答案 3 :(得分:1)
这是另一种选择:
subprocess.check_output('''
application
-first-flag
-second-flag
-some-additional-flag
'''.split())
让Python为您插入逗号,这对于配置文件中的一长串字符串特别有用