1

以下は合理的なアプローチですか?

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

    # use in and out

どこにコンテキストマネージャーインターフェースSerialPortsを実装します。SerialPort

SerialPorts.exit()追加されたシリアル ポートをループして、exit(). はシリアルポートを閉じますSerialPortexit()

これを行うより良い方法はありますか?

4

2 に答える 2

2

このコードを実行すると:

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

一方がエラーを発生させたとしても ( beforeとbefore__exit__のいずれかを使用して)両方が呼び出されることがわかります。ABBA

__exit__単一の collective から両方の を呼び出し__exit__た場合、最初の s にエラーがある場合、2 番目の s は__exit__呼び出されません。

少数の固定数があると仮定して、代わりにネストされたコンテキスト マネージャーを使用します。

于 2011-10-25T15:53:05.917 に答える