Creo que las diversas respuestas aquí recomendando que administre sus bloques try/except
con más fuerza son la respuesta que está buscando. Eso es algo de estilo, no de biblioteca.
Sin embargo, a veces nos encontramos en una situación en la que no es una cuestión de estilo, y realmente do necesita el número de línea para realizar alguna otra acción programática. Si eso es lo que estás preguntando, debes considerar el módulo traceback
. Puede extraer toda la información que necesita sobre la excepción más reciente. La función tb_lineno
devolverá el número de línea que causa la excepción.
>>> import traceback
>>> dir(traceback)
['__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_format_final_exc_line', '_print', '_some_str', 'extract_stack', 'extract_tb', 'format_exc', 'format_exception', 'format_exception_only', 'format_list', 'format_stack', 'format_tb', 'linecache', 'print_exc', 'print_exception', 'print_last', 'print_list', 'print_stack', 'print_tb', 'sys', 'tb_lineno', 'types']
>>> help(traceback.tb_lineno)
Help on function tb_lineno in module traceback:
tb_lineno(tb)
Calculate correct line number of traceback given in tb.
Obsolete in 2.3
Las versiones más recientes de la tubería de rastreo solucionar el problema antes de 2.3, lo que permite el código de abajo para trabajar como estaba previsto: (esta es la manera "correcta")
import traceback
import sys
try:
raise Exception("foo")
except:
for frame in traceback.extract_tb(sys.exc_info()[2]):
fname,lineno,fn,text = frame
print "Error in %s on line %d" % (fname, lineno)
Usted no menciona qué quiere esto. Para depurar un problema? ¿Entonces esa declaración7 puede hacer algo diferente dependiendo de dónde se presentó la excepción? ¿Puedes decirnos más? –
En mi código, la excepción no debería ocurrir en la declaración 1 o en la declaración 2. si lo hace, entonces cualquiera de las declaraciones1 o 2 es incorrecta. es aceptable tenerlo en la declaración3. Es por eso que me gustaría saber en qué línea hay una excepción. – alwbtc
¿Pero qué vas a hacer con la información? ¿Lo necesita una vez para arreglar el programa, o lo necesita en tiempo de ejecución? –