我想用一个例子很容易证明这一点,但问题是一个一般性的问题。假设我正在使用像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
是否存在/不存在{
是的。您编写代码的方式,如果
self.ps
曾经是None
,那么它从一开始就是None
,再也不会改变。所以,不要用每种方法测试它,只需测试一次:现在,构造a
PowerSupply
的任何代码都必须处理该异常或准备传播它,但是您的问题意味着open_resource
无论如何都可能引发异常,所以这不是问题。此外,这似乎是在程序的顶层处理它的正确位置,无论您在何处创建一个PowerSupply
以响应某些GUI、CLI或网络命令,您都准备好处理无法创建它的问题,对吗?在任何使用已经构造的
PowerSupply
的代码都不需要担心。你知道self.ps is not None
或者你不可能从构造函数中取回对象。在相关问题 更多 >
编程相关推荐