首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用连接的硬件进行编程

使用连接的硬件进行编程
EN

Stack Overflow用户
提问于 2014-10-09 02:24:40
回答 1查看 268关注 0票数 0

我认为这将是最容易的例子,但问题是一个一般性的问题。假设我使用的是像PyVISA这样的库,它将GPIB设备与我的程序连接起来。我已经为每个仪器设置了一个python类,所以对于电源,我可能会有这样的东西:

代码语言:javascript
运行
复制
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函数可能无法工作,或者如果该地址上不存在设备,则可能返回None (在我的代码中,我实际上编写了一个函数来执行此操作)。我的问题是:编写像PowerSupply这样的类的最佳实践是什么?如果测试self.ps是否存在/不是None,可以在每个方法中编写异常,但似乎必须有更好的方法。是吗?!

EN

回答 1

Stack Overflow用户

发布于 2014-10-09 03:38:08

如果self.ps存在/不是None,你可以在每一个测试self.ps是否存在/不是None的方法中编写异常,但似乎一定有更好的方法。是吗?!

是。按照您编写代码的方式,如果self.ps曾经是None,那么它将从一开始就是None,并且再也不会改变。因此,不需要在每个方法中都测试它,只需测试一次:

代码语言:javascript
运行
复制
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')

现在,构造PowerSupply的任何代码都必须处理该异常或准备好传播它,但是您的问题暗示open_resource无论如何都可能引发异常,所以这不是问题。此外,这似乎是处理它的正确位置-在您的程序的顶层,无论您在哪里创建PowerSupply以响应某些图形用户界面、命令行界面或网络命令,您都准备好处理无法创建它的问题,对吧?

任何使用已经构造好的PowerSupply的代码都不用担心。你知道self.ps is not None,否则你不可能从构造器中取回对象。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26263835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档