Python -Referenzfehler

Python -Referenzfehler
Python -Programme bestehen aus vielen Fehlern und Ausnahmen, und einige von ihnen sind in gebaut. Diese Fehler und Ausnahmen treten auf, wenn der Python -Interpreter auf Fehler stößt. Ein Programmierer ist beim Schreiben eines Python -Programms nicht immun gegen Fehler und wird wahrscheinlich auf unhandelte Fehler stoßen. Wenn wir versuchen, eine Datei zu öffnen, die nicht existiert, oder eine Zahl durch Null zu teilen, wird eine Ausnahme gegossen. Immer wenn diese Arten von Fehlern auftreten, erstellt Python die Ausnahmegelobjekte. Wenn sie nicht richtig behandelt werden, druckt Python einen Traceback dieses Fehlers aus. In diesem Artikel handelt es sich um eine der Ausnahmen in Python, die als Referenzfehler bezeichnet wird.

Referenzfehler

In Python werden viele Fehler und Ausnahmen in zwei Hauptgruppen eingeteilt: Syntaxfehler und logische Fehler. Logische Fehler werden auch als Ausnahmen bezeichnet. Ausnahmen treten auf, wenn falsche oder illegale Operationen ausgelöst werden. Ein Referenzfehler fällt unter die Kategorie logischer Fehler. Logische Fehler sind solche, die zur Codeausführungszeit auftreten. Wenn ein schwacher Referenzproxy verwendet wird, um auf einen Referenten zuzugreifen, der aus dem Speicher gesammelt wird, wird ein Referenzfehler ausgelöst. Ein Referenzfehler ist Teil der integrierten Ausnahmen von Python. Diese Ausnahmen werden nach dem auftretenden Fehler geworfen.

In Python hat ein Programm 4 Funktionen - L, M, N und O. Wenn wir ein Programm verwenden, in dem die Funktion l Funktion m aufruft m, Funktion M Aufrufe Funktion N, was wiederum die Funktion O aufruft o. Nehmen wir nun an, dass es eine Ausnahme gibt, die in der Funktion N auftritt, aber nicht gelöst oder behandelt wird. Die Ausnahme wird an die Funktion m übergeben und dann L -Funktion l. Wenn der Fehler nicht behoben ist, tritt ein Fehler auf und das Programm kann fehlschlagen.

Lassen Sie uns nun ein Beispiel für einen Referenzfehler diskutieren.

Beispiel 1:

In diesem Beispiel verwenden wir eine integrierte Funktion in Python, um auf ein Objekt zu verweisen. Schauen Sie sich den Code ausführlich an. Zunächst importieren wir die Module und erstellen eine Klasse mit dem Namen "check_object", in der das Objekt übergeben wird. Hier verwenden wir die Funktion def_init_ (self, name) und definieren dann „self.Name ”als Name. Führen Sie nun den folgenden Code in Ihrem System aus:

importieren GC als g
Wewref als WK importieren
Klasse check_object (Objekt):
def __init __ (Selbst, Name):
selbst.Name = Name
def __del __ (selbst):
drucken ('' it % s ') % Selbst
print ('Referenzobjekt =', a.Name)

Das Ergebnis, das wir erhalten, indem wir den vorherigen Code ausführen, wird in der folgenden Abbildung angegeben. Sie können sehen, dass wir einen Referenzfehler erhalten, der besagt, dass das schwach referenzierte Objekt nicht mehr existiert.

Hier können wir sehen, dass wir einen Referenzfehler erhalten, indem wir darum bitten, ein Referenzobjekt ohne ordnungsgemäße Objektdefinition zu drucken.

Das schwache Referenzmodul ermöglicht es einem Python -Programmierer, die schwachen Verweise auf Objekte zu bilden. Ein schwacher Hinweis auf ein Objekt reicht nicht aus, um das Objekt am Leben zu erhalten, und ist der einzige verbleibende Verweis auf den Referenten. Diese Referenten sind schwache Referenzen oder Müllsammlungen, die durch den Referenten und das Gedächtnis, die Freizeit für etwas anderes verwendet, zerstört werden können.

Beispiel 2:

Nehmen wir ein anderes Beispiel, um diesen Fehler besser zu verstehen. Wie wir bereits erläutert haben, tritt ein Referenzfehler auf, wenn ein Objekt im Code schwach verwiesen wird. Mit dem folgenden Code versuchen wir nun, die Objekte vor und nach der Verwendung des Befehls zu drucken.

Hier verwenden wir eine integrierte Funktion in Python, um auf ein Objekt zu verweisen und sie als "obj1" zu nennen. Eine Klasse mit dem Namen "check_object" wird erstellt. Hier definieren wir zwei Funktionen - "_init" und "_del_" -, um die separaten Funktionen auszuführen.

Anschließend verwenden wir das erstellte Objekt der Klasse im Proxy -Befehl wk.Proxy (obj_check). Um nach der Anweisung zu drucken, ist das erstellte "obj_check" auf none gesetzt.

importieren GC als g
Wewref als WK importieren
Klasse check_object (Objekt):
def __init __ (Selbst, Name):
selbst.Name = Name
def __del __ (selbst):
drucken ('' it % s ') % Selbst
obj_check = check_object ('Objekt')
ABC = WK.Proxy (obj_check)
print ('vor deleting =', ABC.Name)
obj_check = keine
print ('nach deleting =', ABC.Name)

Wenn wir den vorherigen Code ausführen, erhalten wir die folgende Ausgabe:

Wie Sie sehen können, erhalten wir beim Ausführen des Code einen Referenzfehler, da Python vor dem Löschen des Objekts die Ausnahme in der Funktion ignoriert und einen Fehler verursacht, da die Operanden von einem anderen Typ waren und ihn nicht unterstützten.

Um zusammenfassen, warum der Referenzfehler auftritt, können wir sagen, dass beim Entfernen eines Objekts aus einem Programm ein Referenzfehler auftritt. Der häufigste Weg, wie dieser Fehler auftritt. Die Beziehung zwischen den Klassen 1 und 2 bleibt, aber es gibt keinen Hinweis auf Klasse 2, da sie entfernt oder zurückgerufen wurde. Der Fehler kann durch Missverständnis der Quellwurzeln verursacht werden und das von Ihnen verwendete Programm kann möglicherweise nicht wissen, wo Sie den Link finden sollen.

So beheben Sie Referenzfehler in Python?

Referenzfehler können mithilfe einer IF-ELSE-Anweisung oder einer Versuchsanweisung behoben werden. Wir können den Code sehen, um den Referenzfehler im folgenden Beispiel zu beheben.

Beispiel 3:

In diesem Beispiel demonstrieren wir den Code, mit dem ein Referenzfehler in einem Programm behoben werden kann. Dieser Code zeigt keine Ausgabe an. Es enthält einfach einige Punkte, die Sie in Ihren Programmen befolgen können, um die Referenzfehler zu vermeiden.

Def test_proxy_ref (self):
a = c ()
A.Bar = 1
Ref = Weapref.Proxy (a, Selbst.Ruf zurück)
del a
Def Check (Proxy):
Proxy.Bar
extra_collect ()
selbst.AsSertraise (WeaCref.ReferenzError, Scheck, Ref)
Wenn test_support.is_jython:
selbst.AsSertraise (WeaCref.ReferenzError, bool, ref)
anders:
selbst.AsSertraise (WeaCref.ReferenzError, bool, schwachref.Proxy (c ()))
selbst.Assert_ (Selbst.cbcalled == 2)

Die erste Funktion, die wir verwenden, ist def test_proxy_ref (self), mit dem ein Testproxy -Verweis auf sich selbst definiert wird. Wir definieren dann, dass die Variable a = c () und a.Bar = 1.

Jetzt verwenden wir die Referenzsyntax „Schwache Referenz.Proxy (a, Selbst.Rückruf) “, um die erwähnte Referenz zurückzurufen. Diese Rückruffunktion stellt sicher, dass alle Referenzen ungültig sind, bevor die Rückrufe aufgerufen werden. Es ist wichtig, dass die erste Referenz zurückgerufen wird oder einfache Begriffe. Die jüngste Referenz wird zuerst aufgeräumt, bevor die zweite Referenz aufgerufen wird. Dies ist ein Test, der alle Referenzen ungültig macht, bevor Rückrufe durchgeführt werden. Um den Proxy zu überprüfen, verwenden wir die Funktionsprüfung (Proxy): Proxy.Bar. Die zusätzliche Sammlungsfunktion wird verwendet, um das Python -Programm in das Gerät zu treten, und hilft bei den Rückrufen, die der Thread aufrufen muss.

Die IF-ELSE-Funktion in Python wird jetzt verwendet. Diese Funktion wird erstellt, um den Testphrase zu überprüfen und die Anweisung "if" in einem Fall auszuführen, in dem die Bedingung wahr ist. Andernfalls wird die Anweisung "else" ausgeführt.

Abschluss

In diesem Beitrag haben wir erfahren, dass ein Referenzfehler aufgrund der schwachen Proxy -Referenz auftritt. Oft kann in einem Programm ein Fehler auftreten, entweder ein Syntaxfehler oder ein logischer Fehler. Ein Referenzfehler fällt unter die Kategorie des logischen Fehlers. Wir haben erklärt, in welchen Fällen ein Referenzfehler durch ein Beispiel auftritt. Probieren Sie diese Beispiele in Ihrem System aus, um das Thema Referenzfehler besser zu verstehen.