2016-08-06 7 views
-1

Context Managerを終了して、制御フローをwith (...):のコードに戻すことができるパターンはありますか?例えばコンテキストマネージャから「中断する」ことはできますか?

(実際には動作しません):

with open('/etc/passwd', 'r') as f: 
    f.seek(0, 2) 
    if f.tell() < 10: 
     print "The file is too small!" 
     break 

    # Process the file. 

が、私は同じことをするとbreakを置き換えることができます何がありますか?

+1

あなたの例では、代わりに例外を使用するように思えます。 –

+1

f.tell()> = 10の場合:do not else: "ファイルが小さすぎる"とは? – theorifice

+2

例外は* for *です。 –

答えて

1

あなたはwithから出ることはできますが、終了することができますので、あなたはループの中でそれをラップすることができますようにそれが見えるdoesntの - 例えばので

for _ in [0]: 
    with open('/etc/passwd', 'r') as f: 
     f.seek(0, 2) 
     if f.tell() < 10: 
      print "The file is too small!" 
      break 

ようですが、propably例外を使用して(コメントで述べたように)またはで包みます機能とはより自然なものです(returnが好きです)。

関連する問題