使用 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
语句,您将必须处理所有 open
、close
和exception
靠自己。
这将导致:
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()
结果相同,我将引用 "un-necessary tab"。
如果您了解并准备好应对所有后果[=其中 29=]。
您从 stem
导入的 Controller
class 是一个 wrapper for ControlSocket
which is itself a wrapper around a socket connection 到 Tor 协议。因此,当您在代码中使用 with
时,您这样做是为了打开与给定端口的连接。与 file
打开和关闭的方式相同,如果您想摆脱 with
.
,则必须自己打开和关闭连接
我有一些 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
语句,您将必须处理所有 open
、close
和exception
靠自己。
这将导致:
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()
结果相同,我将引用 "un-necessary tab"。
如果您了解并准备好应对所有后果[=其中 29=]。
您从 stem
导入的 Controller
class 是一个 wrapper for ControlSocket
which is itself a wrapper around a socket connection 到 Tor 协议。因此,当您在代码中使用 with
时,您这样做是为了打开与给定端口的连接。与 file
打开和关闭的方式相同,如果您想摆脱 with
.