2017-10-04 2 views
1

J'utilise la fonction parse_declaration_list de tinycss2 qui analyse css. Quand je lui donne un css invalide, il renvoie [< ParseError invalide>]. Cependant, je ne peux pas pour la vie de moi comprendre comment réellement attraper cette erreur.comment intercepter une erreur non-fatale dans python

J'ai essayé:

try: 
    parse_declaration_list(arg) 
except: 
    do_something() 

pas de dés.

try: 
    parse_declaration_list(arg)[0] 
except: 
    do_something() 

non.

try: 
    parse_declaration_list(arg) 
except ParseError: 
    do_something() 

toujours rien

error = parse_declaration_list(arg)[0] 
if isinstance(error, Exception): 
    do_something() 

Désolé, ne peut le faire. Je suis complètement perplexe et tout ce que je google vient avec des choses sur les erreurs normales et bien comportés.

+1

pouvez-vous poster le retraçage? 'try/except' devrait déjà attraper _everything_. –

+0

peut-être qu'il est attrapé en interne, puis imprimé, puis revient à votre appel. –

Répondre

1

Le documentation indique que l'erreur n'est pas déclenchée mais renvoyée, c'est-à-dire que try/except ne fonctionnera pas ici. Au lieu de cela, vous devez vérifier le résultat, comme vous le faites dans votre dernière approche. Cependant, ParseError ne semble pas être une sous-classe de Exception. En outre, vous ne pouvez probablement pas simplement vérifier le premier élément de la liste. Vous pouvez essayer quelque chose comme ceci (non testé):

result = parse_declaration_list(arg) 
if any(isinstance(r, tinycss2.ast.ParseError) for r in result): 
    do_something() 
+0

Merci! J'y vais presque J'avais essayé "isinstance (result, tinycss2.ast.ParseError)", mais ça n'a pas marché alors j'ai abandonné cette tactique. – vorpal