關於python with的用法及異常處理

2021-10-02 03:02:34 字數 2507 閱讀 2465

在網上看到一些人部落格使用 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(

)

這裡有兩個煩人的事情。首先,您最終忘記關閉檔案處理程式。第二個是如何處理一旦獲得檔案處理程式可能發生的異常。可以這樣寫來解決這個問題:

這裡有兩個問題。一是可能忘記關閉檔案控制代碼;二是檔案讀取資料發生異常,沒有進行任何處理。下面是處理異常的加強版本:

file

=open

("/tmp/foo.txt"

)try

: data =

file

.read(

)finally

:file

.close(

)

雖然這很好用,但它不必要地冗長。這是with有用的地方。除了更好的語法外,關於它的好處是,它是非常好的處理異常的方法。當與以下**一起使用時,上面的**將如下所示:

有時就是使用一展身手的時候了。除了有更優雅的語法,用還可以很好的處理周圍環境產生的異常。下面是用版本的**:

with

open

("/tmp /foo.txt")as

file

: data =

file

.read(

)

class

sample

:def

__enter__

(self)

:print

"in __enter__()"

return

"foo"

def__exit__

(self,

type

, value, trace)

:print

"in __exit__()"

defget_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 __()函式帶有三個引數-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

python with用法詳解

coding utf8 def except try try print start raise keyerror raise indexerror return 1 except keyerror print key error 異常時執行 return 2 else print other er...

Python with用法 自動關閉檔案原理

with語句的語法,ontext expression 用於建立可自動關閉的資源。with context expression as target s with 塊 使用with 開啟檔案並讀取檔案資料 with open test.yml encoding utf 8 as f print f,...

關於的用法

1.訪問action值棧中的普通屬性 2.訪問action值棧中的物件屬性 要有get set方法 3.訪問值棧中物件屬性的方法 4.訪問值棧中action的普通方法 5.訪問靜態方法 6.訪問靜態屬性 配置屬性檔案,允許ognl訪問靜態方法struts.ognl.allow.true 7.訪問ma...