Administrar fallas de segmentación en Python

Olorunfemi Akinlua 21 junio 2023
Administrar fallas de segmentación en Python

El desarrollo de aplicaciones especialmente complejas puede conducir a situaciones técnicas locas como fallas de segmentación. Esta situación puede ocurrir debido a diferentes factores, y es importante rastrear el problema con su código.

Algunas de las principales causas de fallas de segmentación son la ubicación ilegal de la memoria (usar su código para acceder a la memoria a la que no tiene acceso), obtener grandes conjuntos de datos, recursividad infinita, etc. En este artículo, le mostraremos cómo administrar la segmentación fallos en Python.

Use settrace para administrar la falla de segmentación en Python

Ante un error de fallo de segmentación, es importante saber que tendrás que reescribir tu código.

Conocer la parte a reescribir es un buen punto de partida. Ahí es donde entra en juego sys.trace.

El módulo sys nos permite verificar algunas variables e interactuar con el intérprete, y la función settrace nos permite rastrear la ejecución del programa y sirve como depurador de código fuente de Python.

Entonces, ante un caso de falla de segmentación, podemos rastrear fácilmente qué llamadas se realizan y cuándo sucede todo.

Las funciones de seguimiento son importantes para todo el proceso y toman tres argumentos: frame, event y arg. El marco toma el marco de pila actual, el evento toma una cadena y el argumento toma forma dependiendo del evento que analicemos.

Entonces, dentro de su código, puede importar el módulo sys, crear su función trace y pasar la función trace a través del método settrace, lo que lo convierte en una función de orden superior. Luego, colocas tu código que crea una falla de segmentación.

Vamos a crear una traza para una función test() que imprima dos líneas de código.

import sys


def trace(frame, event, arg):
    print("%s, %s:%d" % (event, frame.f_code.co_filename, frame.f_lineno))
    return trace


def test():
    print("Line 8")
    print("Line 9")


sys.settrace(trace)
test()

Producción :

call, c:\Users\akinl\Documents\Python\segment.py:7
line, c:\Users\akinl\Documents\Python\segment.py:8
call, C:\Python310\lib\encodings\cp1252.py:18
line, C:\Python310\lib\encodings\cp1252.py:19
return, C:\Python310\lib\encodings\cp1252.py:19
Line 8call, C:\Python310\lib\encodings\cp1252.py:18
line, C:\Python310\lib\encodings\cp1252.py:19
return, C:\Python310\lib\encodings\cp1252.py:19

line, c:\Users\akinl\Documents\Python\segment.py:9
call, C:\Python310\lib\encodings\cp1252.py:18
line, C:\Python310\lib\encodings\cp1252.py:19
return, C:\Python310\lib\encodings\cp1252.py:19
Line 9call, C:\Python310\lib\encodings\cp1252.py:18
line, C:\Python310\lib\encodings\cp1252.py:19
return, C:\Python310\lib\encodings\cp1252.py:19

return, c:\Users\akinl\Documents\Python\segment.py:9

Puede ver el evento que ocurre con cada línea, llamada, línea y retorno. Con estos, puede realizar un seguimiento de cada acción que realiza el intérprete de Python y el resultado que proporciona.

Puede ver los resultados del código: Line 8call, C:\Python310\lib\encodings\cp1252.py:18 y Line 9call, C:\Python310\lib\encodings\cp1252.py:18. Por lo tanto, con una falla de segmentación, podemos rastrear dónde comienzan los problemas y trabajar desde allí.

Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

Artículo relacionado - Python Error