如何设置 pyvisa 异常处理程序?
How to setup pyvisa exception handler?
我尝试使用python3和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 ...
我应该在 <1><2> 等位置上右移什么以捕获不同类型的异常?
谢谢
如果您以某种方式向 Visa 提供错误数据,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。您不必这样做,但是有些事情您可以使用实例来完成,而您不能使用 class,此外,如果您给它起一个短名称,则可以减少输入。