2011-08-26 2 views
1

Je voudrais utiliser mon programme ainsi:Python: comment gérer les exceptions d'argparse?

PythonScript de nom de fichier

Mais si j'oublié -f, je veux toujours obtenir le nom du fichier.

Je veux ce « PythonScript nom de fichier » travaille aussi (-> je peux obtenir le nom du fichier à partir args.fileName ou de gérer l'exception)

Je sais que cela doit être facile, je ne peux pas trouver un façon de le faire. Tout le monde peut m'aider? Merci

import argparse 
parser = argparse.ArgumentParser(prog='PROG') 
parser.add_argument('-f', action='store', dest='fileName', 
    default = None, type=str, help='The file name') 

try: 
    args = parser.parse_args() 
except: 
    print "xxx" 
+0

C'est attendu et bon. '- *' est un drapeau, et * option * - ce n'est pas obligatoire. De plus, vous n'avez jamais déclaré que cela devrait être nécessaire, bien au contraire, vous avez même fourni une valeur par défaut. – delnan

+0

oh, je veux dire que je veux toujours obtenir le nom de fichier si j'ai oublié -f. désolé de la confusion – TMS

Répondre

3

Si vous voulez -f être nécessaire, vous pouvez le faire de cette façon avec argparse. Incluez simplement "required = True" dans la fonction add_argument. Rappelez-vous que l'option requise est contradictoire. Il n'est pas suggéré de faire des options nécessaires, mais parfois utile. Si l'option n'est pas donnée, alors la destination reste la valeur None (ou elle est assignée quelle que soit la valeur par défaut que vous avez donnée, qui est None dans votre exemple).

EDIT: J'ai vu votre modification et je comprends ce que vous demandez maintenant. optparse rend cet OMI plus simple. Il semble que pour les arguments positionnels avec argparse, vous devez utiliser add_argument.

Il n'y a vraiment aucun moyen facile d'avoir argparse le faire pour vous. Vous pouvez simuler un peu de créativité avec les éléments suivants:

parser = argparse.ArgumentParser() 
parser.add_argument('file', nargs='?') 
parser.add_argument('-f', dest='file_opt') 
args = parser.parse_args() 
if args.file_opt: 
    args.file = args.file_opt 

En fait, s'il y a une option de fichier donné, il remplace l'argument de position.

+0

merci, mais je veux vraiment -f pour être optionnel, s'il vous plaît voir ma question mise à jour – TMS

+0

Merci, ça fonctionne – TMS

Questions connexes