2016-08-19 92 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。你不需要,但是你可以用一個你不能在課堂上使用的實例來做些事情,另外如果你給它一個簡短的名字,那麼它就不那麼簡單了。