python withの使い方と異常処理について


python withの使い方と異常処理について
ネット上でwithを使って異常処理をしている人を見たが、ネットでよく調べてみると、このキーワードは異常処理に使われていないことが分かった.
実際
実際,with後のコードブロックが異常を投げ出すとexit()メソッドが実行される.ライブラリの開発時に、リソースを整理したり、ファイルを閉じたりする操作は、exit()メソッドに置くことができます.要するにwith-as式はfinallyを書くたびに作業を大幅に簡略化し,コードの優雅さに大きく役立つ.複数ある場合は、次のように書くことができます.
With open('1.txt') as f1, open('2.txt') as  f2:
    do something

withと言うと言わざるを得ないenter__ および_exit__
簡単に言えば_enter__ は、with呼び出し時に実行され(例えば__init__が優先的に実行される)、そして_exit__ (少し__del__に似ていて破棄操作を実行します)もちろん、ソケットが固定されすぎているため、例外処理に適していないためカスタマイズできます.
with文がない場合は、with文を使用しない場合、コードは次のように書かれる場合があります.
file = open("/tmp/foo.txt")
data = file.read()
file.close()

ここには2つの煩わしいことがある.まず、ファイルハンドラを閉じるのを忘れました.2つ目は、ファイルハンドラを取得すると発生する可能性のある例外をどのように処理するかです.この問題を解決するためにこのように書くことができます:ここには2つの問題があります.1つは、ファイルハンドルを閉じるのを忘れる可能性があります.二つ目は、ファイル読み出しデータに異常が発生し、何の処理も行われていないことです.次に、例外を処理する強化バージョンを示します.
file = open("/tmp/foo.txt")
try:
    data = file.read()
finally:
    file.close()

これは使いやすいですが、冗長にする必要はありません.これはwithが役に立つ場所です.より良い文法に加えて、その利点は、異常を処理するのに非常に良い方法であることです.次のコードと一緒に使用すると、上のコードは次のようになります.腕を伸ばすときがあります.より優雅な文法のほか、周囲の環境に生じる異常をうまく処理することができます.次はバージョンのコードです.
with open("/tmp /foo.txt") as file:
    data = file.read()

with_example01.py
class Sample:
    def __enter__(self):
        print "In __enter__()"
        return "Foo"
 
    def __exit__(self, type, value, trace):
        print "In __exit__()"
 
            
def get_sample():
    return Sample()
 
 
with get_sample() as sample:
    print "sample:", sample

実行すると、次のようになります.
bash-3.2$ ./with_example01.py
In __enter__()
sample: Foo
In __exit__()

ご覧のように、実行_enter __()関数が返す値-この場合、「Foo」はsampleがブロックを実行する本体に割り当てられ、sampleの値が印刷されます.「Foo」呼び出し_exit __()関数です.本当に強力な機能は、異常を処理できることです.Sampleの__に気づいたかもしれませんexit __()関数には、3つのパラメータ-val、type、traceがあります.これらは異常処理に有用である.上記の例を修正して、その動作原理を理解しましょう.
取得例外を使用する場合は、次の操作を行います.
try:
    print("  11")
    num#      
    print("  22")
except:
    print("try       ")
finally:
    print("            ")


出力結果:>>>runfile(‘E:/pythonnew/test.py’,wdir=‘E:/pythonnew’)実行11 try異常発生時実行異常発生の有無にかかわらず実行
まとめ
ライブラリの開発時に、リソースを整理したり、ファイルを閉じたりする操作は、exit()メソッドに置くことができます.
異常処理の詳細にtry except finallyを使用していません