簡體   English   中英

是否有必要使用 with 語句來創建 stem.control.Controller 對象?

[英]Is there a point to using a with statement for creating a stem.control.Controller object?

我有一些 python 與 Tor 守護進程對話,在這里它告訴守護進程關閉。

from stem import Signal
from stem.control import Controller

def shutDownTor():
    with Controller.from_port(port=portNum) as controller:
        controller.signal(Signal.SHUTDOWN)

我正在使用with語句,因為我學習中竊取的代碼也是如此。 代碼工作正常,但我想知道使用with語句是否有任何意義。

我知道當你使用with打開文件時,它確保文件關閉,即使有Exception或中斷。 但在這種情況下,它似乎是所有with正在做的是增加了沒有必要的標簽。 變量controller甚至留在命名空間內。

如果你想擺脫with語句,你必須自己處理所有的opencloseexception

這將導致:

  try:
    controller = Controller.from_port()
  except stem.SocketError as exc:
    print("Unable to connect to tor on port 9051: %s" % exc)
    sys.exit(1)
  finally:
      controller.close()

結果相同,我將引用“不必要的標簽”。

如果您知道並准備好應對所有后果,您可以跳過所有這些(處理closeopenexception )。

你從stem導入的Controller類是ControlSocket一個包裝器,它本身就是一個到Tor 協議的套接字連接包裝器 因此,當您在代碼中使用with時,您這樣做是為了打開與給定端口的連接。 用同樣的方法在file打開和關閉,你必須自己打開和關閉連接,如果你想擺脫with

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM