with使用凳兵,預(yù)先處理與事后處理

with語句常用來處理一些事務(wù)的事先處理與事后清理工作。像文件處理時要先取得文件句柄饭望,處理完后要關(guān)閉文件句柄

file = open('tes.txt')
data = file.read()
file.close()

這里沒有對讀取數(shù)據(jù)發(fā)生的異常作任何處理,而且容易忘記把文件close掉铅辞。下面代碼添加異常處理

try:
    file = open('tes.txt')
except:
    print('fail to open')

try:
    data = file.read()
    # do something
except:
    print('read err')
    # do something
finally:
    file.close()

這段代碼雖然運行良好,但是太冗長了巷挥。下面使用with優(yōu)雅地實現(xiàn)文件操作

with open('tes.txt') as file:
    data = file.read()
    # do something

這里with會自動處理文件關(guān)閉操作验靡。這里沒有對打開文件異常作處理,數(shù)據(jù)讀取異的處理是文件對象中定義的胜嗓,因為是C寫的模塊,不知道實際處理情況辞州。實際使用時候用try except外層處理一次應(yīng)該就夠了

自定義with處理對象

定義一個對象并實現(xiàn)enter()與exit()方法,分別進(jìn)行預(yù)處理與后處理变过。enter()返回一個任意對象給as使用

class Tes:
    def __enter__(self):
        print('in enter')
        # raise ValueError('enter error')   # 這里的異常會直接退出,不會執(zhí)行with block與__exit__()
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        print('in exit')
        print(exc_type)
        print(exc_val)
        print(exc_tb)
        if exc_type is ValueError:
            return True  #返回ture時 with block的ValueError異常會被攔截, 程序會正常執(zhí)行

    # 這個不是必需的
    def dosomething(self):
        print('do something')

with Tes() as t:
    t.dosomething()
    raise ValueError('block error')
  
## 運行結(jié)果  
# in enter
# do something
# in exit
# <class 'ValueError'>
# block error
# <traceback object at 0x102a255c8>

with多個對象

with open('1.txt') as f1, open('2.txt') as f2:
    # do something with f1, f2
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末岛杀,一起剝皮案震驚了整個濱河市崭孤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌辨宠,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件精偿,死亡現(xiàn)場離奇詭異,居然都是意外死亡笔咽,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門拓轻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扶叉,你說我怎么就攤上這事≡嫜酰” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵张弛,是天一觀的道長。 經(jīng)常有香客問我吞鸭,道長,這世上最難降的妖魔是什么刻剥? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮滩字,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘麦箍。我一直安慰自己,他們只是感情好挟裂,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著话瞧,像睡著了一般寝姿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上饵筑,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機與錄音根资,去河邊找鬼同窘。 笑死,一個胖子當(dāng)著我的面吹牛想邦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播丧没,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼锡移,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了淆珊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤施符,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后戳吝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡骨坑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了且警。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡斑芜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出杏头,到底是詐尸還是另有隱情,我是刑警寧澤醇王,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布崭添,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏棘伴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一焊夸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧阱穗,春花似錦、人聲如沸颇象。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蕴茴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間倦淀,已是汗流浹背蒋畜。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工姻成, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人科展。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像才睹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子甘邀,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理松邪,服務(wù)發(fā)現(xiàn),斷路器测摔,智...
    卡卡羅2017閱讀 134,628評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,737評論 25 707
  • 轉(zhuǎn)載自:http://mp.weixin.qq.com/s/LO1yyFeUA6pR_YPyfDoSig 姓名:梅...
    虐先森閱讀 1,419評論 0 1
  • 都說感情要靠緣分,嗯沒錯事實也是要如此浙于。
    伊家閱讀 121評論 1 0
  • 文/安若木槿 對我而言,寫作意味著什么紊服? 自有意識以來,這個問題便始終伴隨著我的寫作之旅欺嗤。問題的答案時而清晰時而模...
    蜉蝣舟閱讀 873評論 6 6