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は、2つの刺し傷を連結することで、このコードが有効であると見なします:(。垂直方向の文字列リストを使用し、コードを肥大化させることなく(内部の各アイテムを包むなど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 に答える