串口上下文管理

2024-09-25 10:31:41 发布

您现在位置:Python中文网/ 问答频道 /正文

以下方法是否合理?在

with SerialPorts() as serial_ports:
    in= SerialPort("COM1")
    serial_ports.add(in)
    out = SerialPort("COM2")
    serial_ports.add(out)

    # use in and out

其中SerialPorts和{}实现上下文管理器接口。在

SerialPorts.exit()循环通过添加的串行端口,调用它们的exit()SerialPortexit()关闭串行端口。在

有更好的方法吗?在


Tags: 方法端口inadduseaswithexit
2条回答

这个怎么样?在

with SerialPorts("COM1", "COM2") as (inport, outport):
    # use inport and outport

in是python中的reserved word,使用它作为变量名将导致语法错误。在


编辑:以下是一个可能的实现(未测试):

^{pr2}$

但在这一点上我听从了@agf。他的建议对你的情况好得多。在

如果运行此代码:

class A(object):
    def __enter__(self):
        return self
    def __exit__(self, *args):
        print "exit", self

class B(object):
    def __enter__(self):
        return self
    def __exit__(self, *args):
        print "exit", self
        raise Exception

with A() as a, B() as b:
    pass

您将看到,即使其中一个出现错误,__exit__都会被调用(在B之前是A,在A之前是{})。在

如果您从单个集合__exit__调用这两个__exit__,如果第一个集合有错误,第二个{}将不会被调用。在

使用嵌套上下文管理器代替,假设您有少量的固定数量的上下文管理器。在

相关问题 更多 >