9

在 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())?

4

4 回答 4

5

您可以在空格后的行尾添加逗号,如下所示:

subprocess.check_output( [
   'application'           ,
   '-first-flag'           ,
   '-second-flag'          ,
   '-some-additional-flag' ,
] )

这样做看起来有点糟糕,但如果你遗漏了任何论点,很容易发现。

于 2012-09-28T23:12:29.937 回答
4

您可以将每个字符串包装在括号中:

subprocess.check_output( [
  ('application'),
  ('-first-flag'),
  ('-second-flag'),
  ('-some-additional-flag'),
] )

顺便说一句,Python 可以使用尾随逗号,所以总是在行尾使用逗号,这也应该减少错误。

于 2012-09-29T17:51:24.497 回答
3

也许对于这种特殊情况:

arglist = 'application -first-flag -second-flag -some-additional-flag'
arglist = arglist.split()
subprocess.check_output(arglist)

或者,如果您发现自己编写了许多这样的唯一列表,请创建一个将行连接成列表形式的宏,这样您就可以避免手动放置逗号。

于 2012-09-28T23:44:31.930 回答
1

这是另一种选择:

subprocess.check_output('''
application
-first-flag
-second-flag
-some-additional-flag
'''.split())

让 Python 为您插​​入逗号,这对于配置文件中的长字符串列表特别有用

于 2020-04-20T21:50:49.523 回答