文字列または開いているファイル オブジェクトのいずれかを受け入れたい (再帰的) 関数があります。引数が文字列の場合、関数はファイルを開き、そのファイル オブジェクトを使用します。関数から戻ったときに、この開いているファイル オブジェクトを明示的に閉じるのが最善のようですが、それは文字列が渡された場合のみです。 )。これが私が現在使用しているものです:
def read_file(f, param):
do_close = isinstance(f,basestring)
f = open(f, 'rb') if do_close else f
try:
info = f.read(4)
#check info here
if info == Info_I_Want(param):
return f.read(get_data(info))
else:
f.seek(goto_new_position(info))
return read_file(f,param)
except IKnowThisError:
return None
finally:
if do_close:
f.close()
IKnowThisError
必要な情報が見つからない場合は、ある時点で引き上げられると想定できます。
これは非常に下品な気がします。より良い方法はありますか?