J'ai ce code python:
import os
try:
os.system('wrongcommand')
except:
print("command does not work")
Le code imprime:
wrongcommand: command not found
Au lieu de command does not work
. Est-ce que quelqu'un sait pourquoi il n'imprime pas mon message d'erreur?
Si vous souhaitez qu'une exception soit levée lorsque la commande n'existe pas, vous devez utiliser subprocess
:
import subprocess
try:
subprocess.call(['wrongcommand'])
except OSError:
print ('wrongcommand does not exist')
À bien y penser, vous devriez probablement utiliser subprocess
au lieu de os.system
en tous cas ...
Parce que os.system () indique un échec via le code de sortie de la méthode
Le code de sortie de la commande appelée est directement renvoyé à Python.
Il existe une documentation vous indiquant que os.system () déclencherait une exception en cas d'échec. os.system () appelle simplement l'appel système underlaying () du système d'exploitation et renvoie sa valeur de retour.
Veuillez lire la documentation os.system () attentivement.
Il y a deux problèmes dans votre extrait de code. Tout d'abord, ne faites pas simplement try: ... except:
, Soyez toujours précis quant à l'exception que vous voulez gérer. Sinon, votre programme avale tout type d'erreur, même celles auxquelles vous ne vous attendez pas. Dans la plupart des cas, cela entraînera un comportement inattendu à un autre moment de l'exécution.
De plus, les appels os.system()
doivent la plupart du temps être remplacés par leurs homologues du module subprocess
.
Pour voir ce qui ne va pas, omettez le bloc try/except et regardez réellement le traceback/exception. Comme d'autres l'ont souligné, vous remarquerez qu'il n'y a pas d'exception dans votre cas, c'est pourquoi votre chaîne personnalisée n'est pas imprimée.
Conclusion: pensez aux exceptions spécifiques qui peuvent se produire dans votre bloc de code. Réfléchissez bien à ceux que vous attendez pour certaines raisons et gérez-les de manière appropriée. Ne manipulez pas ceux auxquels vous ne vous attendez pas.
wrongcommand: command not found
est la sortie du Shell os.system
utilise pour appeler la commande. os.system
n'a pas levé d'exception
EDIT: édité par copier-coller une partie du commentaire de mgilson
Il existe un autre moyen plus simple:
import os
def dat():
if os.system('date') == 0:
print("Command successfully executed")
else:
print("Command failed to execute")
dat()
Bien que le sous-processus puisse être votre meilleur ami. os.system est toujours utile quelque part, en particulier pour le programmeur en mode C/C++.
Par conséquent, le code sera ci-dessous.
import os
try:
os_cmd = 'wrongcommand'
if os.system(os_cmd) != 0:
raise Exception('wrongcommand does not exist')
except:
print("command does not work")