Segmentierungsfehler in Python verwalten

Olorunfemi Akinlua 21 Juni 2023
Segmentierungsfehler in Python verwalten

Die Entwicklung besonders komplexer Anwendungen kann zu verrückten technischen Situationen wie Segmentierungsfehlern führen. Diese Situation kann aufgrund verschiedener Faktoren auftreten, und es ist wichtig, das Problem mit Ihrem Code zu verfolgen.

Einige der größten Ursachen für Segmentierungsfehler sind illegale Speicherortung (Verwenden Ihres Codes für den Zugriff auf Speicher, auf den Sie keinen Zugriff haben), das Abrufen riesiger Datensätze, unendliche Rekursion usw. In diesem Artikel zeigen wir Ihnen, wie Sie die Segmentierung verwalten Fehler in Python.

Verwenden Sie settrace, um Segmentierungsfehler in Python zu verwalten

Wenn Sie mit einem Segmentierungsfehler konfrontiert werden, ist es wichtig zu wissen, dass Sie Ihren Code neu schreiben müssen.

Die Kenntnis des neu zu schreibenden Teils ist ein guter Ausgangspunkt. Hier kommt sys.trace ins Spiel.

Das sys-Modul erlaubt uns, einige Variablen zu überprüfen und mit dem Interpreter zu interagieren, und die settrace Funktion erlaubt uns, die Programmausführung zu verfolgen und dient einem Python-Quellcode-Debugger.

Bei einem Segmentierungsfehler können wir also leicht nachvollziehen, welche Anrufe getätigt wurden und wann alles passiert.

Die Ablaufverfolgungsfunktionen sind für den gesamten Prozess wichtig und nehmen drei Argumente an: frame, event und arg. Das frame nimmt den aktuellen Stack-Frame, das event einen String und das arg nimmt je nach geparstem Event Gestalt an.

Sie können also in Ihrem Code das sys-Modul importieren, Ihre trace-Funktion erstellen und die trace-Funktion durch die settrace-Methode übergeben, was eine Funktion höherer Ordnung ergibt. Dann platzieren Sie Ihren Code, der einen Segmentierungsfehler erzeugt.

Lassen Sie uns einen Trace für eine test()-Funktion erstellen, die zwei Codezeilen ausgibt.

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()

Ausgang:

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

Sie können das Ereignis sehen, das mit jeder Leitung auftritt, Anruf, Leitung und Rückkehr. Mit diesen können Sie jede Aktion des Python-Interpreters und die von ihm ausgegebene Ausgabe verfolgen.

Sie können die Codeausgaben sehen - Line 8call, C:\Python310\lib\encodings\cp1252.py:18 und Line 9call, C:\Python310\lib\encodings\cp1252.py:18. Daher können wir mit einem Segmentierungsfehler nachvollziehen, wo die Probleme beginnen und uns von dort aus vorarbeiten.

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

Verwandter Artikel - Python Error