2

たとえば.txtファイルのリストを取得するためにglobの代わりにiglobを使用しようとしています。.txtファイルが存在しない場合、globはエラーを返しませんが、iglobはエラーを返します。

コード:

def iGlobLatest():
    dir_list = glob.iglob('*.txt')
    print dir_list.next()

.txtファイルが存在しない場合、次のようになります。

トレースバック(最後の最後の呼び出し):

iGlobLatest()のファイル "T:\ prod \ offsetValidation \ scripts \ goofin.py"、行98

iGlobLatestのファイル"T:\ prod \ offsetValidation \ scripts \ goofin.py"、行88、print dir_list.next()

StopIteration

try / exceptionを使用すると、エラーを回避できますが、それが唯一の方法ですか?.txtファイルの存在を確認するための他の提案には、globの使用が含まれますが、globの代わりにiglobを使用しようとしているためです。

4

1 に答える 1

4

iglob()はジェネレータであるため、一致StopIterationするすべてのファイルが使い果たされると発生します。ファイルがまったくない場合はStopIteration、の最初の呼び出し時に発生しnext()ます。

ジェネレーターは、次のことを繰り返すことを目的としています。

for file in glob.iglob('*.txt'):
    # whatever

このようにして、StopIteration例外が暗黙的にキャッチされます。あなたが実際に何をしようとしているのかわかりませんが、おそらくこれがあなたが望んでいることです:

return next(dir_list, None)   # return first item of dir_list,
                              # or None if no files match

(Python 2.6以降)

于 2012-04-06T16:34:45.007 に答える