0

必要なことを行うために Python でユーティリティを作成しました (関係ありませんが、社内 DSL 用の ctags 互換タグ ファイルを生成するためのものです)。

とにかく、私はステートメントのコンテキストでファイルを開いて読んでいますが、with興味があります.人々はそのプロセスの失敗をどのように処理する傾向がありますか?

私の解決策は

with open(filename, 'rt') as f:
    content = f.read()

matches = re.findall(REGEX, content)

if len(matches) > 0:
    # do more stuff...
    pass

ファイルを閉じて処理するのが好きなので、一致チェックを with ステートメントの外に置きました。ただし、contentビルドされない場合、これは失敗します。

私の解決策は、contentこのコードのすぐ上にある空の文字列に初期化することでしたが、私が感じたのは、関数を終了させたいということです。関数などから例外がスローされます。

この場合、残りの関数をwithブロックに入れることもできますが、それによって開いているファイルの範囲が広がります。障害に照らして存在するように、ブロックcontentの前に作成できます。with私は興味がありますが、人々が見たいと思う他の解決策は何ですか (そもそも質問に意味があると仮定して)?

私は次のようなものが好きだと思います:

with open(filename, 'rt') as f:
    content = f.read()
else:
    content = ''

matches = re.findall(REGEX, content)

それが一般的なコンセンサスである場合、私はそれに対処し、残りの機能のためにファイルを開いたままにしておく必要があるという考えを受け入れます。:)

4

1 に答える 1

1

私がすることは、あなたが言ったとおりです:

content = ''
with open(filename, 'rt') as f:
    content = f.read()

matches = re.findall(REGEX, content)

空の文字列の場合、正規表現と一致のチェックのコストは無視できるためです。

ただし、ファイルを再利用しないと仮定して、最終的に閉じられる限り、ファイルをすぐに閉じることはそれほど重要ではありません。

于 2010-09-16T02:27:10.893 に答える