2017-02-15 5 views
1

Ich lerne Grundlagen von Python und habe bereits am Anfang des Argparse-Tutorials stecken. Ich erhalte die folgende Fehlermeldung:SystemExit: 2 Fehler beim Aufruf von parse_args()

import argparse 
parser = argparse.ArgumentParser() 
args = parser.parse_args() 

usage: __main__.py [-h] echo 
__main__.py: error: unrecognized arguments: -f 
An exception has occurred, use %tb to see the full traceback. 

SystemExit: 2 

a% tb Befehl gibt die folgende Ausgabe:

SystemExit        Traceback (most recent call last) 
<ipython-input-16-843cc484f12f> in <module>() 
----> 1 args = parser.parse_args() 

C:\Users\Haik\Anaconda2\lib\argparse.pyc in parse_args(self, args, namespace) 
    1702   if argv: 
    1703    msg = _('unrecognized arguments: %s') 
-> 1704    self.error(msg % ' '.join(argv)) 
    1705   return args 
    1706 

C:\Users\Haik\Anaconda2\lib\argparse.pyc in error(self, message) 
    2372   """ 
    2373   self.print_usage(_sys.stderr) 
-> 2374   self.exit(2, _('%s: error: %s\n') % (self.prog, message)) 

C:\Users\Haik\Anaconda2\lib\argparse.pyc in exit(self, status, message) 
    2360   if message: 
    2361    self._print_message(message, _sys.stderr) 
-> 2362   _sys.exit(status) 
    2363 
    2364  def error(self, message): 

SystemExit: 2 

Wie könnte ich dieses Problem beheben? Dank

+0

Sie können nicht einfach in ipython damit experimentieren, da die ipython-Befehlszeile standardmäßig in 'parse_args' verwendet wird. Probieren Sie dies mit einer normalen '* .py'-Datei und der ausführbaren Python-Datei aus, um diese Datei zu starten. – languitar

+0

Siehe [argparse] (http://stackoverflow.com/questions/23714542/why-doe-pythons-argparse-use-an-error-code-of-2-for-systexit). Es hilft dir oder hilft sicher anderen –

+0

Ich habe deinen Code reproduziert und ich finde kein Problem. Haben Sie es in der .py-Datei anstatt auf andere Weise versucht? –

Antwort

3

argparse ist ein Modul, die Argumente entworfen von der Befehlszeile geben zu analysieren, so zum Beispiel, wenn Sie Folgendes an einer Eingabeaufforderung:

$ python my_programme.py --arg1=5 --arg2=7 

Sie können argparse verwenden das interpretieren --arg1=5 --arg2=7 Teil. Wenn argparse denkt, dass die Argumente ungültig sind, wird es beendet, was im Allgemeinen in Python geschieht, indem sys.exit() aufgerufen wird, was den Fehler SystemExit auslöst, was Sie sehen.

Also das Problem ist, Sie versuchen, argparse von einem interaktiven Interpreter zu verwenden (sieht wie ipython aus), und an diesem Punkt hat das Programm bereits begonnen, also sollten die Argumente bereits geparst worden sein.

Um es richtig zu versuchen, erstellen Sie eine separate Python-Datei wie my_programme.py und führen Sie es mit python von einer Befehlszeile aus, wie ich dargestellt habe.

+0

ja es war genau Ipython, nur wollen um zu sagen, wie sehr ich Ihre klare Antwort schätze! Und selbst wenn ich mehrere Stunden damit verbracht habe, es selbst herauszufinden, scheint es, dass ich noch ein paar Tage brauchen würde, um dieses Problem alleine zu lösen. Vielen Dank. – Haik

2

parse_args Methode, wenn es ohne Argumente aufgerufen wird, versucht, Inhalt von sys.argv zu analysieren. Ihr Interpreter-Prozess hat sys.argv mit Werten gefüllt, die nicht mit Argumenten übereinstimmen, die von Ihrer parser-Instanz unterstützt werden. Aus diesem Grund schlägt das Parsen fehl.

Versuchen Sie, sys.argv zu drucken, um zu überprüfen, welche Argumente an Ihren Interpreterprozess übergeben wurden.

Versuchen Sie, parser.parse_args(['my', 'list', 'of', 'strings']) aufzurufen, um zu sehen, wie der Parser für Interpreter funktioniert, der mit verschiedenen cmdline-Argumenten gestartet wird.

Verwandte Themen