2016-08-19 32 views
2

我尝试使用python 3和pyvisa 1.8与GPIB设备进行通信。如何设置pyvisa异常处理程序?

但如何区分不同类型的excptions。

例如:

try: 
    visa.ResourceManager().open_resources('COM1') 
exception visa.VisaIOError: 
    <some code> 

时打开失败,它产生一种普遍的例外VisaIOError,但我怎么能知道,是端口忙或端口不存在,或者其他什么东西?

,如:

try: 
    visa.ResourceManager().open_resources('COM1') 
exception <1>: 
    # device busy 
exception <2>: 
    # device does not exist 
exception ... 

我应该怎么正确的位置< 1> 2 <>等捕获不同类型的例外?

感谢

回答

0

签证还可以提高ValueErrors和AttributeError的,如果你以某种方式把它错误的数据。 我认为它可能会引发IOError,尽管我从未见过这种情况发生。

但是,它主要引发VisaIOError。

有些事情可以做,以获取有关异常的详细信息是:

_rm = visa.ResourceManager() 
try: 
    _rm.open_resources('COM1') 
exception visa.VisaIOError as e: 
    print(e.args) 
    print(_rm.last_status) 
    print(_rm.visalib.last_status) 

您可以从visa.constants.StatusCode

if _rm.last_status == visa.constants.StatusCode.error_resource_busy: 
    print("The port is busy!") 

last_status和visalib比较各种常量状态码.last_status有时会提供相同的状态码 - 但有时它们不会,所以您应该检查它们两个。

请注意,我实例化ResourceManager。你不需要,但是你可以用一个你不能在课堂上使用的实例来做些事情,另外如果你给它一个简短的名字,那么它就不那么简单了。