如何设置pyvisa异常处理程序?

时间:2016-08-19 14:08:24

标签: python visa

我尝试使用python 3和pyvisa 1.8与GPIB设备进行通信。

但如何区分不同类型的排除。

例如:

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 ...

我应该在什么位置&lt; 1&gt;&lt; 2&gt;等等,以捕捉不同类型的例外情况?

由于

1 个答案:

答案 0 :(得分:1)

如果您以某种方式提供不良数据,Visa也可能会引发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。你不必这样做,但是你可以用一个你可以在课堂上做的实例来做一些事情,另外如果你给它一个简短的名字,它就不会打字。