今天在看Mentor要求的代碼中碰到了with這一個關鍵詞,不是太理解,便去google了一下,仔細看了一下別人的解釋,基本對with有了一個初步的理解。
with是python2.5以后才有的,它實質是一個控制流語句,with可以用來簡化try-finally語句。它的主要用法是實現一個類__enter__()和__exit__()方法,基本形式如下:
class controlled_execution: def _enter__(self): set things up return thing def __exit__(self, type, value, traceback): tear thing down with controlled_execution() as thing: some code
在實際的運行過程中,python會首先運行enter里的代碼,返回thing,作為as 后面的變量值,然后再運行with模塊中的代碼,最后會自動執行exit中的代碼,而不管with中的代碼運行結果如何。這也就是with能簡化try-finally語句的原因。所以with通常用在讀取文件的操作中,將文件句柄的關閉操作放在exit方法中,這樣就不會因忘記釋放文件句柄而產生可能出現的錯誤。
另外,exit()方法的返回值可以用來指示with部分的代碼出現的異常是否需要raise,如果返回false,則會raise,否則,不進行任何操作。
參考文章