HI, les gars. J'utilise cmd et optparse pour développer un CLI.py pour une collection de classes déjà fonctionnelles (CDContainer, CD, etc.). Voici quelques parties du code. J'ai un problème. Lorsqu'il y a des exceptions (mauvais type d'entrée ou valeurs manquantes), l'optparse quittera le programme entier au lieu de la méthode de commande spécifique.gestion des exceptions pour optparse de python
import cmd
class CLI(cmd.Cmd):
def do_addcd(self, line):
args=line.split()
parser = OptionParser()
parser.add_option("-t", "--track", dest="track_number", type="int",
help="track number")
parser.add_option("-n", "--cdname", dest="cd_name", type="string",
help="CD name")
(options, positional_args) = parser.parse_args(args[0:])
cd_obj= CD()
cd_obj.addCD(options.track_number, options.cd_name)
Sous "> python", si je tape CLI.py, alors j'aurai (Cmd), donc je pourrais taper la commande comme "(Cmd) addcd 3 -t thriller -n". mais si je tape "addcd -t r -n 3", alors optparse mettra fin à l'ensemble CLI.py et quittera. Ce n'est pas bon pour moi. Je veux rappeler à l'utilisateur pour chaque méthode, au lieu de mettre fin à l'ensemble du programme. Cependant, la documentation d'optparse indique que «l'ensemble du programme se termine». donc je ne pouvais pas utiliser optparse "aveuglément". Que puis-je faire?
Je vois. et je n'utilise pas l'optparse? J'analyse les args par moi-même et je l'analyse en conséquence.si j'utilise optparse, comme vous l'avez dit, je devrais remplacer ses méthodes de sortie ou d'erreur en quelque sorte, dont je ne suis pas si confiant que je pourrais le faire. – pepero
Je voudrais rester avec optparse. Cela gardera le comportement d'analyse des options cohérent, et écrire un analyseur d'arguments qui suit les conventions normales demanderait beaucoup de travail. J'ai mis à jour ma réponse avec un exemple de substitution de la méthode d'erreur. –
salut, Robie, merci beaucoup pour ta réponse détaillée avec code !!! ça marche avec mon intention! mais juste une chose, quand j'appelle la méthode -help, par exemple, addcd -h, il énumère les options, puis quitte le programme. est-il également possible de le résoudre pour "aide". Merci beaucoup! – pepero