2016-08-19 29 views
2

GPIBデバイスと通信するためにpython 3とpyvisa 1.8を使用しようとしています。pyvisa例外ハンドラを設定するには?

しかし、さまざまな種類の嘔吐を区別する方法です。例えば

オープンに失敗した
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 ... 

例外の異なる種類をキャッチするためにI右の位置< 1> < 2>にというように何をすべきか?あなたは何とかそれを悪いデータを与えれば

おかげ

答えて

0

ビザもValueErrorsとはAttributeErrorを上げることができます。 私はIOErrorを発生させることができるとは思っていませんが、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をインスタンス化することに注意してください。あなたはする必要はありませんが、クラスではできないインスタンスで行うことができることがあります。また、短い名前を付けて入力する必要がありません。

関連する問題