0

誰かが私に Web をもう少し検索するように言う前に、私はすでに 1 時間以上検索しています。

そのため、私の課題では、メイン モジュールの selectedFileCopy のファイルを開く safeOpen 関数を含むインポートされたモジュールを使用する必要があります。しかし、safeOpen 関数を呼び出すと、開こうとしているファイルは None タイプであり、したがって反復可能ではないことが示されます。なぜだかわかりません。

ここにいくつかのコードがあります:

def safeOpen(prompt, openMode, errorMessage ):
   while True:
      try:
         open(input(prompt),openMode)
         return 
      except IOError:
         return(errorMessage)

def selectivelyCopy(inputFile,outputFile,predicate):
   linesCopied = 0
   for line in inputFile:
      outputFile.write(inputFile.predicate)
      if predicate == True:
         linesCopied+=1
   return linesCopied


inputFile = fileutility.safeOpen("Input file name: ",  "r", "  Can't find that file")
outputFile = fileutility.safeOpen("Output file name: ", "w", "  Can't create that file")
predicate = eval(input("Function to use as a predicate: "))   
print(type(inputFile)) 
print("Lines copied =",selectivelyCopy(inputFile,outputFile,predicate))
4

1 に答える 1

4

ファイル オブジェクト自体を返す必要があります。

return open(input(prompt),openMode)

いくつかのコメント。コードのほとんどの部分はほとんど意味がありません。

  1. ではsafeOpen、無限ループがありますが、最初の繰り返しの後に無条件にそのままにしておきます。このループはまったく必要ありません。
  2. safeOpenファイル オブジェクトまたはエラー メッセージのいずれかを返します。通常、関数は常に同様の種類のオブジェクトを返し、例外を使用してエラーを通知する必要があります。
  3. safeOpenは例外を飲み込むため、ビルトインよりも安全性が低くなりますopen
  4. inputFile.predicatepredicateファイル オブジェクトから呼び出された属性を読み取ろうとしますinputFileAttributeErrorそのような述語が存在しないので、これは を生成します。関数に述語関数を渡したい場合は、 as として呼び出しますpredicate(object)
  5. predicate == Trueがブール値である場合にのみ機能predicateしますが、これは必要なものではありません。
  6. 行カウントは、実際にはコピーされた行をカウントしません。
于 2012-04-15T21:11:46.253 に答える