El bloque de prueba de Python no captura las excepciones de os.system

Tengo este código python:

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

El código se imprime:

 wrongcommand: command not found 

En lugar de command does not work . ¿Alguien sabe por qué no está imprimiendo mi mensaje de error?

Si desea que se genere una excepción cuando el comando no existe, debe usar el subprocess :

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

Ahora que lo pienso, probablemente debería usar subprocess lugar de os.system todos modos …

Porque os.system () indica una falla a través del código de salida del método

  • valor de retorno = 0 -> todo bien
  • valor de retorno! = 0 -> algun error

El código de salida del comando llamado se pasa directamente a Python.

Hay documentación que le indica que os.system () generará una excepción en caso de fallo. os.system () simplemente llama a la llamada del sistema subyacente () del sistema operativo y devuelve su valor de retorno.

Por favor lea la documentación de os.system () cuidadosamente .

Hay dos problemas en tu fragmento de código. En primer lugar, nunca try: ... except: siempre sea específico acerca de qué excepción desea controlar. De lo contrario, su progtwig simplemente se traga cualquier tipo de error, también aquellos que no espera. En la mayoría de los casos, esto conducirá a un comportamiento inesperado en algún otro momento durante el tiempo de ejecución.

Además, las llamadas a os.system() deben ser reemplazadas la mayor parte del tiempo por sus contrapartes del módulo de subprocess .

Para ver qué es lo que no funciona, omita el bloque try / except y vea el rastreo / excepción. Como han señalado otros, se dará cuenta de que no hay ninguna excepción en su caso, por lo que su cadena personalizada no se imprime.

Línea inferior: piense qué excepciones específicas pueden ocurrir en su bloque de código. Piensa bien en cuál de ellos esperas que suceda por ciertas razones y manéjalas adecuadamente. No maneje aquellos que no espera.

wrongcommand: command not found es la salida del shell os.system está utilizando para invocar el comando. os.system no lanzó una excepción

EDITAR: editado por copiar y pegar parte del comentario de mgilson