用连接的硬件编程

2024-09-26 18:11:52 发布

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

我想用一个例子很容易证明这一点,但问题是一个一般性的问题。假设我正在使用像PyVISA这样的库,它将GPIB设备与我的程序连接起来。我为每种乐器都设置了一个python类,因此对于电源,我可能会有如下所示:

import visa

class PowerSupply:
    def __init__(self):
        rm = visa.ResourceManager()
        self.ps = rm.open_resource('GPIB0::12::INSTR')
    def getVoltage(self):
        return self.ps.ask('VOLT?')
    def setVoltage(self,v):
        self.ps.write('VOLT '+str(v))
    ...

ps = PowerSupply()
ps.setVoltage(10)

不幸的是,rm.open_resource函数可能无法工作,或者可能返回{},如果该地址不存在设备(在我的代码中,我实际上编写了一个函数来代替它)。我的问题是:编写PowerSupply这样的类的最佳实践是什么?可以在每个测试self.ps是否存在/不存在{}的每个方法中写入异常,但似乎一定有更好的方法。有?!在


Tags: 方法函数rmself证明defvisaopen
1条回答
网友
1楼 · 发布于 2024-09-26 18:11:52

One could write exceptions into every method that test if self.ps exists/is not None, but it seems there must be a better way. Is there?!

是的。您编写代码的方式,如果self.ps曾经是None,那么它从一开始就是None,再也不会改变。所以,不要用每种方法测试它,只需测试一次:

def __init__(self):
    rm = visa.ResourceManager()
    self.ps = rm.open_resource('GPIB0::12::INSTR')
    if self.ps is None:
        raise PowerSupplyException('Unable to open resource GPIB0::12::INSTR')

现在,构造aPowerSupply的任何代码都必须处理该异常或准备传播它,但是您的问题意味着open_resource无论如何都可能引发异常,所以这不是问题。此外,这似乎是在程序的顶层处理它的正确位置,无论您在何处创建一个PowerSupply以响应某些GUI、CLI或网络命令,您都准备好处理无法创建它的问题,对吗?在

任何使用已经构造的PowerSupply的代码都不需要担心。你知道self.ps is not None或者你不可能从构造函数中取回对象。在

相关问题 更多 >

    热门问题