1

番号のリストを含むファイルを読み取ります (これは、後で必要になる識別子です)。

ファイルの最後に空の行がある場合、次のコードにバグがあります。

return [ int(x)  for x in lines if not x == '' and not x == "\r\n"]

次の python 出力を使用します。

  [...]
File "Z:\Projects\PyIntegrate\perforceIntegration.py", line 453, in readChange
ListNumbers
    self.changeListNumbers = loadChangeListNumbers()
  File "Z:\Projects\PyIntegrate\perforceIntegration.py", line 88, in loadChangeL
istNumbers
    return [ int(x)  for x in lines if not x == '' and not x == "\r\n"]
ValueError: invalid literal for int() with base 10: ''

明らかに、私のテストif not x == '' and not x == "\r\n"はこの状況を処理するには不十分です。

私は何を間違っていますか?

(ファイルの最後の空の行を抑制すれば、つまり、ファイルの最後の行に実際の数値を含めれば、すべて問題ありません)

4

1 に答える 1

6

Try this:

return [ int(line) for line in lines if line.strip() ]

This will strip all spaces and newlines from the line and if it is not empty (i.e. it contains some characters, preferably numbers), it will convert it into int.

It will however fail (and raise ValueError) if your file contains other characters than digits or it contains spaces between digits.

于 2012-07-27T09:24:34.360 に答える