2012-09-11 6 views
10

Ich habe diesen Python-Code:Python try-Block verfängt nicht os.system Ausnahme

import os 
try: 
    os.system('wrongcommand') 
except: 
    print("command does not work") 

Der Code druckt:

wrongcommand: command not found 

Statt command does not work. Weiß jemand, warum es meine Fehlermeldung nicht druckt?

Antwort

18

Wenn Sie eine Ausnahme geworfen haben, wenn der Befehl nicht existiert, sollten Sie subprocess verwenden:

import subprocess 
try: 
    subprocess.call(['wrongcommand']) 
except OSError: 
    print ('wrongcommand does not exist') 

Kommen Sie, daran zu denken, werden Sie wahrscheinlich subprocess statt os.system sowieso verwenden sollten ...

+0

danke, das ist genau das, was ich brauchte. – Cinder

1

wrongcommand: command not found ist die Ausgabe der Shell os.system wird verwendet, um den Befehl aufzurufen. bearbeitet von Kopieren und Einfügen Teil Kommentar des mgilson

+0

danke, aber wie fangen Sie es in Python? ist es überhaupt möglich? – Cinder

+1

Ja, aber nicht mit 'os.system()'. Dies ist ein Grund, warum Sie das Modul 'subprocess' verwenden sollten, wie in @ mgilson's Antwort beschrieben. –

+0

Genauer gesagt ist 'falccommand: command not found' die Ausgabe der * shell *, die' os.system' verwendet, um den Befehl aufzurufen.(Eine andere Shell mit einem anderen 'PATH' könnte den Befehl finden). – mgilson

3

Es gibt zwei Probleme im Code-Schnipsel: os.system nicht eine Ausnahme

EDIT werfen. Zunächst einmal, tun Sie nie nur try: ... except:, immer genau, welche Ausnahme Sie behandeln möchten. Ansonsten schluckt Ihr Programm einfach jeden Fehler, auch solche, die Sie nicht erwarten. In den meisten Fällen führt dies zu einem anderen Zeitpunkt während der Laufzeit zu unerwartetem Verhalten.

Darüber hinaus sollten os.system() Anrufe die meiste Zeit durch ihre Gegenstücke aus dem subprocess Modul ersetzt werden.

Um zu sehen, was schief läuft, lassen Sie den try/except-Block aus und schauen Sie sich die Traceback/Exception an. Wie andere bereits erwähnt haben, werden Sie bemerken, dass es in Ihrem Fall keine Ausnahme gibt, weshalb Ihre benutzerdefinierte Zeichenfolge nicht gedruckt wird.

Fazit: Denken Sie darüber nach, welche spezifischen Ausnahmen in Ihrem Codeblock auftreten können. Überlegen Sie genau, welche von Ihnen aus bestimmten Gründen erwartet werden, und gehen Sie angemessen damit um. Behandle nicht diejenigen, die du nicht erwartest.

9

Da os.system() einen Fehler durch den Exit-Code der 0 = Rückgabewert

    • Methode gibt - ok alles>
    • Rückgabewert = 0 -> einige Fehler

    Der Exit-Code des aufgerufenen Befehls wird direkt an Python zurückgegeben.

    Es gibt eine Dokumentation, die besagt, dass os.system() im Falle eines Fehlers eine Ausnahme auslösen würde. os.system() ruft nur den unterlegenden system() -Aufruf des Betriebssystems auf und gibt seinen Rückgabewert zurück.

    Bitte lesen Sie die os.system() Dokumentation sorgfältig.

  • Verwandte Themen