이 예제는 예제를 통해 가장 쉽게 설명 할 수 있지만 일반적인 질문입니다. 내 프로그램과 GPIB 장치를 연결하는 PyVISA와 같은 라이브러리를 사용한다고 가정 해보십시오. 나는 각 악기에 대한 파이썬 클래스를 설정 한, 그래서 전원 공급 장치, I는 다음과 같이 할 수도 있습니다 :연결된 하드웨어를 사용한 프로그래밍
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
이 아닌지 테스트하는 모든 메서드에 예외를 작성할 수 있지만 더 좋은 방법이 있어야합니다. 거기 있니?!
확실하게'__init__'가 실패하면 오류가 발생합니까? – jonrsharpe
더 jon의 코멘트에 ... 의존성을 관리하는 것은 호출자의 작업이어야합니다. 'try : ps = PowerSupply(); except : do_something_else()'... 그리고 init은 powersupply가 없다는 것에 대한 오류를 분명히 제기해야합니다. –
@jonrsharpe :'open_resource' "는'None'을 반환 할 것입니다." 그래서, 아니오,'__init__'는이 경우 실패하지 않습니다. 그러나이 문제는 실패 할 수 있습니다. 'self.ps : raise SomeException이 아니라면 ('리소스를 열지 못했습니다 ')'등을 추가하십시오. – abarnert