¿Cómo subo un FileNotFoundError correctamente?

Utilizo una biblioteca de terceros que está bien, pero no maneja archivos inexistentes como quisiera. Al darle un archivo inexistente, en lugar de elevar el antiguo

FileNotFoundError: [Errno 2] No such file or directory: 'nothing.txt' 

se levanta algún mensaje oscuro:

 OSError: Syntax error in file None (line 1) 

No quiero manejar el archivo faltante, no quiero capturar ni manejar la excepción, no quiero generar una excepción personalizada, ni quiero open el archivo, ni crearlo si no existe.

Solo quiero verificar que exista ( os.path.isfile(filename) hará el truco) y, si no es así, simplemente levante un FileNotFoundError adecuado.

Intenté esto:

 #!/usr/bin/env python3 import os if not os.path.isfile("nothing.txt"): raise FileNotFoundError 

lo que solo sale:

 Traceback (most recent call last): File "./test_script.py", line 6, in  raise FileNotFoundError FileNotFoundError 

Esto es mejor que un “Error de syntax en el archivo Ninguno”, pero ¿cómo es posible generar la excepción “real” de Python con el mensaje adecuado, sin tener que volver a implementarla?

Pase en argumentos:

 import errno import os raise FileNotFoundError( errno.ENOENT, os.strerror(errno.ENOENT), filename) 

FileNotFoundError es una subclase de OSError , que toma varios argumentos. El primero es un código de error del módulo errno (el archivo no encontrado siempre es errno.ENOENT ), el segundo es el mensaje de error (use os.strerror() para obtener esto) y pase el nombre del archivo como el tercero.

La representación final de la cadena utilizada en un rastreo se construye a partir de esos argumentos:

 >>> print(FileNotFoundError(errno.ENOENT, os.strerror(errno.ENOENT), 'foobar')) [Errno 2] No such file or directory: 'foobar'