亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

Python 的 with 語句詳解

2020-02-23 05:29:18
字體:
來源:轉載
供稿:網友

一、簡介

with是從Python 2.5 引入的一個新的語法,更準確的說,是一種上下文的管理協議,用于簡化try…except…finally的處理流程。with通過__enter__方法初始化,然后在__exit__中做善后以及處理異常。對于一些需要預先設置,事后要清理的一些任務,with提供了一種非常方便的表達。

with的基本語法如下,EXPR是一個任意表達式,VAR是一個單一的變量(可以是tuple),”as VAR”是可選的。
代碼如下:
with EXPR as VAR:
    BLOCK
根據PEP 343的解釋,with…as…會被翻譯成以下語句:
代碼如下:
mgr = (EXPR)
exit = type(mgr).__exit__  # Not calling it yet
value = type(mgr).__enter__(mgr)
exc = True
try:
    try:
        VAR = value  # Only if "as VAR" is present
        BLOCK
    except:
        # The exceptional case is handled here
        exc = False
        if not exit(mgr, *sys.exc_info()):
            raise
        # The exception is swallowed if exit() returns true
finally:
    # The normal and non-local-goto cases are handled here
    if exc:
        exit(mgr, None, None, None)
為什么這么復雜呢?注意finally中的代碼,需要BLOCK被執行后才會執行finally的清理工作,因為當EXPR執行時拋出異常,訪問mgr.exit執行就會報AttributeError的錯誤。


二、實現方式

根據前面對with的翻譯可以看到,被with求值的對象必須有一個__enter__方法和一個__exit__方法。稍微看一個文件讀取的例子吧,注意在這里我們要解決2個問題:文件讀取異常,讀取完畢后關閉文件句柄。用try…except一般會這樣寫:
代碼如下:
f = open('/tmp/tmp.txt')
try:
    for line in f.readlines():
        print(line)
finally:
    f.close()
注意我們這里沒有處理文件打開失敗的IOError,上面的寫法可以正常工作,但是對于每個打開的文件,我們都要手動關閉文件句柄。如果要使用with來實現上述功能,需要需要一個代理類:
代碼如下:
class opened(object):

    def __init__(self, name):
        self.handle = open(name)

    def __enter__(self):
        return self.handle

    def __exit__(self, type, value, trackback):
        self.handle.close()

with opened('/tmp/a.txt') as f:
    for line in f.readlines():

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久女女女女999久久| 亚洲欧洲日本专区| 欧美午夜视频在线观看| 欧美丝袜美女中出在线| 午夜精品久久久久久久99热| 精品一区二区三区四区在线| 欧美亚洲视频在线观看| 国产精品美女久久久久av超清| 91黑丝高跟在线| 最近2019免费中文字幕视频三| 亚洲区一区二区| 久久99精品久久久久久琪琪| 国产原创欧美精品| 国产精品成人品| 亚洲亚裔videos黑人hd| 欧美精品日韩www.p站| 日韩成人小视频| 日本一本a高清免费不卡| 亚洲精品白浆高清久久久久久| 神马久久桃色视频| 亚洲综合精品伊人久久| 亚洲一二三在线| 一区二区在线免费视频| 欧美中文字幕精品| 中文字幕欧美国内| 7777kkkk成人观看| 欧美性xxxx极品hd满灌| xxx一区二区| 亚洲精品少妇网址| 国产成人精品a视频一区www| 日韩日本欧美亚洲| 欧美午夜激情在线| 欧美怡红院视频一区二区三区| 日韩一区二区久久久| 久久免费视频这里只有精品| 国内精品免费午夜毛片| 黄网动漫久久久| 久久免费视频在线| 国产精品欧美一区二区三区奶水| 欧美三级xxx| 综合国产在线观看| 91久久在线观看| 日韩禁在线播放| 国产成人涩涩涩视频在线观看| 亚洲国产欧美久久| 91久热免费在线视频| 欧美网站在线观看| 久久视频免费在线播放| 国产亚洲激情视频在线| 欧美日韩激情小视频| www.日韩视频| 国产精品九九九| 亚洲丝袜一区在线| 欧美极品少妇xxxxⅹ喷水| 在线激情影院一区| 欧美视频在线视频| 国产噜噜噜噜久久久久久久久| 久久久av网站| 青青久久aⅴ北条麻妃| 精品福利视频导航| 国产成人一区二| 欧美激情伊人电影| 久99久在线视频| 国产精品久久久久久久久久小说| 精品一区二区三区电影| 亚洲香蕉成视频在线观看| 国产一区在线播放| 国内精品在线一区| 国产精品白嫩美女在线观看| 最近免费中文字幕视频2019| 欧美性猛交xxxx乱大交蜜桃| 国产精品天天狠天天看| 少妇久久久久久| 亚洲成av人乱码色午夜| 精品亚洲永久免费精品| 久久久精品电影| 国产精品综合久久久| 欧美性资源免费| 欧美亚洲另类制服自拍| 狠狠躁天天躁日日躁欧美| 国产精品国产三级国产专播精品人| 亚洲精品美女久久久久| 九九热99久久久国产盗摄| 国内精品久久久久影院优| 午夜精品久久久久久久久久久久久| 夜夜躁日日躁狠狠久久88av| 8050国产精品久久久久久| 国产69久久精品成人| 欧美性受xxx| 欧美亚洲国产视频小说| 2019国产精品自在线拍国产不卡| 久久久久久久91| 久久精品久久精品亚洲人| 亚洲欧洲一区二区三区在线观看| 欧美激情视频在线免费观看 欧美视频免费一| 欧美www视频在线观看| 国产精品久久久久久久9999| 亚洲国产精品久久精品怡红院| 最近2019中文字幕在线高清| 久久久国产一区| 日韩网站免费观看| 琪琪第一精品导航| 国外视频精品毛片| 成人午夜在线影院| 欧美日韩国产中文精品字幕自在自线| 久久人91精品久久久久久不卡| 亚洲欧美中文在线视频| 国内偷自视频区视频综合| 亚洲欧美国产精品久久久久久久| 97久久精品在线| 欧美亚洲另类在线| 久久久久久久久网站| 日韩国产一区三区| 日韩在线视频一区| 欧美日韩国产中字| 91夜夜未满十八勿入爽爽影院| 国产精品美乳一区二区免费| 国产日韩欧美夫妻视频在线观看| 亚洲欧洲黄色网| 欧美一级大胆视频| 在线亚洲午夜片av大片| 国产乱肥老妇国产一区二| 欧美黄网免费在线观看| 欧美极品欧美精品欧美视频| 成人免费网站在线| 久久免费少妇高潮久久精品99| 欧美精品videos性欧美| 国外成人在线直播| 欧美性生交xxxxxdddd| 国产ts一区二区| 久久久久久久久久av| 秋霞午夜一区二区| 久久影院免费观看| 亚洲日本成人女熟在线观看| 富二代精品短视频| 日韩av免费看网站| 在线观看免费高清视频97| 亚洲精品国产精品自产a区红杏吧| 久久免费福利视频| 欧美多人乱p欧美4p久久| 久久精品视频网站| 日韩在线中文字幕| 91精品免费久久久久久久久| 精品国产美女在线| 国产女精品视频网站免费| 国产精品久久久久久久一区探花| 国产精品网红福利| 97国产精品视频人人做人人爱| 亚洲国产欧美一区二区三区久久| 久热精品视频在线| 欧美日韩一区二区精品| 日韩av片免费在线观看| 日韩av在线影视| 国产午夜精品视频| 欧美激情一区二区三区成人| 国产成人精品网站| 成人免费观看49www在线观看| 亚洲免费电影一区| 青草青草久热精品视频在线网站| 成人av在线网址| 在线日韩中文字幕| 久久午夜a级毛片| 国产精品女主播| 日韩人体视频一二区|