有一些任務,可能事先需要設定,事後做清理工作。對於這種場景,python的with語句提供了一種非常方便的處理方式。
大家可以做下實驗看下輸出.#!/usr/bin/env python
class test(obj):
def __enter__(self):
print "in __enter__()"
return "test_with"
def __exit__(self, type, value, trace):
print "in __exit__()"
def get_example():
return test()
with get_example() as example:
print "example:", example
__exit__ 方法有三個引數 val, type 和 trace。 這些引數在異常處理中相當有用。
實際上,在with後面的**塊丟擲任何異常時,__exit__() 方法被執行。正如例子所示,異常丟擲時,與之關聯的type,value和stack trace傳給 __exit__() 方法,因此丟擲的xx異常被列印出來了。開發庫時,清理資源,關閉檔案等等操作,都可以放在 __exit__ 方法當中。
另外,__exit__ 除了用於tear things down,還可以進行異常的監控和處理,注意後幾個引數。要跳過乙個異常,只需要返回該函式true即可。
下面的樣例**跳過了所有的typeerror,而讓其他異常正常丟擲。
def __exit__(self, type, value, traceback):
return isinstance(value, typeerror)
__exit__ 函式可以進行部分異常的處理,如果我們不在這個函式中處理異常,他會正常丟擲,這時候我們可以這樣寫
try:
with open( "a.txt" ) as f :
do something
except ***error:
do something about exception
python 基本語法 拾遺
django 開發中一般見到的python 內部類,最多是在model 設計過程中。所謂內部類,就是在類內部定義的類,主要目的是為了更好的抽象現實世界。內部類的距離 汽車是個類,汽車的地盤,輪胎也可以抽象為類,將其定義到汽車類中,則形成了內部類,更好的描述汽車類,因為底盤,輪胎是汽車的一部分 一般不...
Linux常見命令拾遺
0.1 使用 表示該部分需要根據你的實際情況替換1.軟體安裝解除安裝類 徹底移除軟體 apt get purge remove soft name2.檔案操作 重新命名檔案 mv filename1 filename23.許可權操作 任何人都有讀 寫 執行三項許可權 chown 777 filena...
C語言基本語法拾遺
常量與指標 指標陣列 定義的變數是乙個陣列,陣列的每個元素都是乙個指定型別的指標。基本定義格式為 type var name n 例如 定義乙個包含100個元素的整型指標陣列p int p 100 下面這種定義方式與上面等價,因為運算子優先順序高於 運算子 int p 100 int main in...