¿Cómo puedo obtener el nombre del archivo y el número de línea en el script de Python?
Exactamente la información de archivo que obtenemos de un rastreo de excepción. En este caso sin plantear una excepción.
Gracias a mcandre, la respuesta es:
#python3
from inspect import currentframe, getframeinfo
frameinfo = getframeinfo(currentframe())
print(frameinfo.filename, frameinfo.lineno)
import inspect inspect.getframeinfo(inspect.currentframe()).lineno
currentframe()
se llama, lo que significa que no puede simplificar esto más quegetframeinfo(currentframe()).lineno
(si solo le importa el número de línea y no el nombre del archivo). Ver docs.python.org/2/library/inspect.html#inspect.currentframeEl uso
currentframe().f_back
depende de si está utilizando una función o no.Llamar a inspeccionar directamente:
Llamar a una función que lo hace por ti:
fuente
Útil si se usa en un archivo común: imprime el nombre del archivo, el número de línea y la función de la persona que llama:
fuente
Nombre de archivo :
Línea :
(no
inspect.currentframe().f_back.f_lineno
como se mencionó anteriormente)fuente
NameError: global name '__file__' is not defined
en mi intérprete de Python:Python 2.7.6 (default, Sep 26 2014, 15:59:23)
. Ver stackoverflow.com/questions/9271464/…Es mejor usar sys también
La salida es:
fuente
Solo para contribuir
hay un
linecache
módulo en Python, aquí hay dos enlaces que pueden ayudar.documentación del módulo
linecache código fuente de linecache
En cierto sentido, puede "volcar" un archivo completo en su caché y leerlo con los datos linecache.cache de la clase.
Para obtener información adicional, para el manejo de errores, simplemente puede usar
fuente
fuente
__file__
: Ver stackoverflow.com/questions/3056048/…En Python 3 puedes usar una variación de:
En código, puede usar:
Para producir:
Donde 123 y 124 son las líneas desde las que se realizan las llamadas.
fuente
Esto es lo que me funciona para obtener el número de línea en Python 3.7.3 en VSCode 1.39.2 (
dmsg
es mi mnemónico para el mensaje de depuración):Para llamar mostrando una variable
name_s
y su valor:La salida se ve así:
fuente