El módulo de Python sys
proporciona algunas de las funciones poderosas, pero son complejas de entender. Uno de los cuales es el sys.settrace()
que se utiliza para implementar depuradores, perfiladores y herramientas de cobertura. Esto es específico del subproceso y debe registrar el seguimiento mediante threading.settrace()
.
Saber cómo funciona internamente la función es realmente importante en caso de que planee crear su propio depurador.
En un nivel superior, sys.settrace()
registra el rastreo al intérprete de Python. Un rastreo es básicamente la información que se devuelve cuando ocurre un evento en el código. Es posible que haya visto traceback
cuando su código tiene algún error o se genera una excepción.
El rastreo registrado se invoca cuando ocurre uno de los siguientes cuatro eventos:
- La función se llama
- Función devuelve
- Ejecución de una línea.
- Se levanta una excepción
Sintaxis: sys.settrace(marco, evento, arg.marco)
Parámetros:
marco: el marco es el evento de marco de pila actual
: una string que puede ser'call', 'line', 'return', 'exception'
o'opcode'
arg: depende del tipo de eventoDevoluciones: referencia a la función de seguimiento local que luego devuelve una referencia a sí misma.
Ejemplo:
Vamos a crear nuestra propia función de rastreo local con line, function and call
eventos. Estos eventos se destacan en el siguiente código dado.
# program to display the functioning of # settrace() from sys import settrace # local trace function which returns itself def my_tracer(frame, event, arg = None): # extracts frame code code = frame.f_code # extracts calling function name func_name = code.co_name # extracts the line number line_no = frame.f_lineno print(f"A {event} encountered in \ {func_name}() at line number {line_no} ") return my_tracer # global trace function is invoked here and # local trace function is set for fun() def fun(): return "GFG" # global trace function is invoked here and # local trace function is set for check() def check(): return fun() # returns reference to local # trace function (my_tracer) settrace(my_tracer) check()
Producción:
A call encountered in check() at line number 30 A line encountered in check() at line number 31 A call encountered in fun() at line number 24 A line encountered in fun() at line number 25 A return encountered in fun() at line number 25 A return encountered in check() at line number 31
Quizás se pregunte por qué la función local se my_code
devuelve a sí misma.
La razón está oculta en el funcionamiento de sys.settrace()
. Lo sys.settrace
que hace es que primero registra un seguimiento global que se llama cada vez que se crea un marco que devuelve nuestra función de seguimiento local my_trace
cada vez que ocurre cualquiera de los eventos mencionados anteriormente. Para una mejor comprensión, observe la imagen que se muestra a continuación:
Si no queremos que se rastree nuestro alcance, entonces None
debe devolverse, pero si ese no es el caso, es posible que deseemos hacer lo mismo con nuestra función de rastreo local, entonces debería regresar None
si hay un error, entonces settrace(None)
se llama automáticamente.
Nota: hay una función nombrada gettrace
disponible en sys
el módulo para obtener el conjunto de seguimiento porsys.settrace()
Publicación traducida automáticamente
Artículo escrito por nishkarsh146 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA