2016-08-19 4 views
2

J'essaie d'utiliser python 3 et pyvisa 1.8 pour communiquer avec les périphériques GPIB.Comment configurer le gestionnaire d'exceptions pyvisa?

mais comment distinguer différents types d'excptions.

Par exemple:

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

en cas d'échec ouvert, il générer une exception générale VisaIOError, mais comment puis-je savoir, est le port occupé ou le port n'existe pas ou autre chose?

comme:

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

Que dois-je droit sur la position 1 <> < 2> et ainsi de suite pour attraper différents types d'exceptions?

Merci

Répondre

0

Visa peut également augmenter ValueErrors et AttributeError si vous donnez en quelque sorte ce mauvais données. Je pense que ça peut élever IOError, même si je n'ai jamais vu ça arriver.

Mais oui, cela augmente principalement VisaIOError.

Certaines choses que vous pouvez faire pour obtenir plus d'informations sur une exception sont:

_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) 

Vous pouvez comparer ces codes d'état avec différentes constantes de visa.constants.StatusCode

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

last_status et visalib .last_status donne parfois le même code de statut - mais parfois non, vous devriez donc vérifier les deux.

Notez que j'instancie ResourceManager. Vous n'avez pas à le faire, mais il y a des choses que vous pouvez faire avec une instance que vous ne pouvez pas faire avec la classe, plus si vous lui donnez un nom court, c'est moins typer.