2017-10-11 1 views
0

Je suis relativement novice en python et j'essaie de gérer une erreur qui me permet d'afficher les deux points qui causent l'échec. Une variable est dans une fonction et l'autre variable est en dehors de la fonction. Ma tentative est le code ci-dessous:Erreur de réimpression à l'extérieur de l'appel de fonction en python

def fun(x): 
    z = 0.5 * x 
    if z == 1.0: 
     return z 
    else: 
     raise Exception('z is not 1.0') 

if __name__ == '__main__': 
    y = 9.0 
    x = y/4.0 
    try: 
     print fun(x) 
    except fun as err: 
     print 'y is %f' % y 
     print err 

Donc, si y = 8.0, puis x = 2.0 et z = 1.0 et je suis bon. Mais si y = 9.0 puis z != 10 et je veux l'erreur et la valeur de y à afficher. y n'est pas accessible dans fun(), donc je peux le faire là-bas. Je me rends compte que ceci est un exemple inutile.

En réalité, je passe une ligne de données d'un fichier à fun(), et je veux fun() pour lancer l'erreur sur quelle partie de la ligne provoque l'erreur, mais il ne connaît pas le nom du fichier.

Merci pour toute aide!

Répondre

0

Utilisez votre extérieur try/except pour intercepter et répondre à Exceptionfun().

Vous essentiellement eu, juste besoin de changer except fun as err: à except Exception as err:

def fun(x): 
    z = 0.5 * x 
    if z == 1.0: 
     return z 
    else: 
     raise Exception('z is not 1.0') 

if __name__ == '__main__': 
    y = 9.0 
    x = y/4.0 
    try: 
     print fun(x) 
    except Exception as err: 
     print 'y is %f' % y 
     print err 
+0

Mais la fonction n'a pas accès à la variable y. Je voudrais pouvoir connaître la valeur de y et z qui a causé l'erreur. A moins que je ne sois mal compris. – John

+0

Pouvez-vous réécrire votre exemple pour qu'il ressemble davantage à votre code de production? En ce moment la ligne 'try/except' * a * accès à la variable' y'. Même si 'fun()' est une fonction séparée, elle ne fait qu'élever le 'Exception'. Le 'try/except 'est le code qui exécute, attrape et rapporte l'erreur soulevée par' fun() '. –

+0

D'accord, merci. Je vois que je confonds. Vous avez 100% raison. Je n'ai pas réalisé que vous avez réellement modifié le code et répondu complètement à ma question. J'avais besoin d'Exception dans la ligne sauf. C'est ce que je ne pouvais pas comprendre. Merci! – John