2009-09-27 9 views
3

Je voudrais exclure l'erreur que le code suivant produit, mais je ne sais pas comment.Comment faire pour exclure SyntaxError?

from datetime import datetime 

try: 
    date = datetime(2009, 12a, 31) 
except: 
    print "error" 

Le code ci-dessus n'imprime pas "error". C'est ce que j'aimerais pouvoir faire.

edit: La raison pour laquelle je voudrais vérifier les erreurs de syntaxe est que 12a est un paramètre de ligne de commande.

Merci.

+4

non, c'est faux. Vous ne devriez pas eval, exec ou autrement causer 'SyntaxError' avec l'entrée de la ligne de commande! Si vous avez besoin d'un nombre, contractez-le avec 'int()' !! – u0b34a0f6ae

Répondre

9

Les "paramètres" de la ligne de commande sont des chaînes. si votre code est:

datetime(2009, '12a', 31) 

il ne produira pas SyntaxError. Il soulève TypeError.

Tous les paramètres de ligne de commande doivent d'abord être nettoyés avant d'être utilisés dans votre code. par exemple comme ceci:

month = '12' 
try: 
    month = int(month) 
except ValueError: 
    print('bad argument for month') 
    raise 
else: 
    if not 1<= month <= 12: 
     raise ValueError('month should be between 1 to 12') 
+0

La première augmentation ne devrait pas être indentée jusqu'à présent – foosion

+0

merci, foosion – SilentGhost

3

Si vous voulez vérifier les paramètres de ligne de commande, vous pouvez également utiliser argparse ou optparse, ils vont gérer la vérification de la syntaxe pour vous.

3

Vous ne pouvez pas détecter d'erreurs de syntaxe car la source doit être valide avant de pouvoir être exécutée. Je ne suis pas tout à fait sûr, pourquoi vous ne pouvez pas corriger l'erreur de syntaxe, mais si la ligne avec le datetime est générée automatiquement par l'utilisateur (?) Et vous devez être capable d'attraper ces erreurs, essayez:

try: 
    date = eval('datetime(2009, 12a, 31)') 
except SyntaxError: 
    print 'error' 

Mais c'est toujours une solution horrible. Peut-être pouvez-vous nous dire pourquoi vous devez attraper de telles erreurs de syntaxe.

Questions connexes