Beheben Sie AttributeError: ‚NoneType‘ Objekt hat kein Attribut ‚Shape‘

NumPy ist ein beliebtes Tool für Berechnungen mit Zahlen, die Matrizen, Arrays und mathematische Funktionen betreffen. Der Shape-Attributwert eines NumPy-Arrays gibt ein Tupel zurück, das die Dimensionen des Arrays zeigt. Und wenn es um das Umgestalten und Bearbeiten von NumPy-Arrays geht, ist das Attribut entscheidend.

Hier ist, wie die shape-Attributfunktion funktioniert:

Python

 

import numpy as np
arr = np.array([[5, 1], [16, 33]])
print(arr.shape)

Ausgabe:

Python

 

(2, 2)

Das Shape-Attribut ist auch in pandas oder OpenCV wichtig.

Hier ist, wie das Shape-Attribut in OpenCV verwendet wird:

Python

 

import cv2
img = cv2.imread(r'C:\Users\ADMIN.DESKTOP-KB78BPH\Desktop\New folder
(2)\2.jpg')
print(img.shape)

Die Ausgabe lautet:

Python

 

(1280, 1920, 3)

Wie beobachtet, führt das Programm aus und gibt die Form von (1280, 1920, 3) zurück. Die bereitgestellten Details sind wichtig, da sie die Struktur des Arrays präsentieren und somit die Durchführung von Operationen ermöglichen.

Manchmal kann es jedoch vorkommen, dass Sie versuchen, das Shape-Attribut abzurufen, und stattdessen die Fehlermeldung AttributeError: NoneType-Objekt hat kein Attribut shape erhalten. Der Fehler tritt auf, wenn NumPy dem Wert None zugewiesen wurde oder überhaupt nicht initialisiert wurde. Dies zeigt an, dass das Array nicht ordnungsgemäß definiert ist und daher kann es nicht zum Durchführen von Operationen verwendet werden.

In diesem Artikel erfahren Sie, wie Sie praktikable Lösungen für den Fehlerbehebungsprozess finden, damit Sie die Entwicklung mit den Datenverarbeitungs-Bibliotheken wie Pandas und NumPy abschließen können.

Wir behandeln zunächst die Lösungen in einer Zusammenfassung und später im Detail. Lasst uns eintauchen.

Zu lang? Hier ist eine schnelle Lösung

  • Initialisieren Sie ein Array mit gültigen Werten oder stellen Sie sicher, dass Funktionen nicht None zurückgeben.
  • Stellen Sie sicher, dass der Bild- oder Videoverzeichnispfad korrekt ist, da ein falscher Pfad zu einem Fehler führt. Bieten Sie außerdem einen Pfad an, der keine Unicode-Zeichen enthält, da OpenCV diese nicht unterstützt. Alternativ können Sie den Speicherort des Bildes oder Videos ändern.
  • Fügen Sie nach dem Laden des Bildes/Frames eine Assert-Anweisung hinzu. Eine weitere Option besteht darin, den Fehler mit try/except zu behandeln.
  • Wenn Sie Bilder verwenden, die mit künstlicher Intelligenz erstellt wurden und diese gespeichert haben, aber beim Öffnen des Bildes einen Fehler festgestellt haben, müssen Sie dtype=np.uint8 hinzufügen, damit Sie Bilder erstellen können, die mit künstlicher Intelligenz erstellt wurden. Stellen Sie außerdem sicher, dass die Kamera Ihres Geräts nicht für ein anderes Programm geöffnet ist. Wenn ja, schließen Sie das Programm vollständig, damit die Kamera dem aktuellen Projekt gewidmet ist.
  • In anderen Fällen kommt der attributeerror von veralteten Versionen von OpenCV, versuchen Sie also, diese Version zu aktualisieren.

1. Pfad überprüfen

Wie bereits erwähnt, ist die Hauptursache des Fehlers, wenn Sie einen falschen Pfad verwenden. Es ist daher eine gute Idee, zu überprüfen, ob der Pfad auf dem Gerät vorhanden ist oder nicht mit Hilfe der Funktion os.path.exists() Methode. Die Funktion os.getcws() gibt dann das aktuelle Verzeichnis aus und ist daher wichtig, wenn Sie einen Pfad erstellen möchten.

Python

 

import os
print(os.path.exists('1.jpg'))
print(os.getcwd())

2. Verwenden von Try/Except

Es ist auch möglich, den Fehler mithilfe der try/except-Anweisung zu verwalten. Hier ist, wie die Lösung funktioniert:

Python

 

import cv2
img = cv2.imread('1.jpg')
try:
     print(img.shape)
except AttributeError:
     print('The ultimate value: ', img)

Zuerst wird der try-Abschnitt ausgeführt, und wenn ein AttributeError auftritt, wird der except-Block ausgeführt.

3. Prüfen, ob die Variable ‚None‘ ist, mithilfe der ‚If Else‘ Anweisung

Um den Fehler zu beheben, muss man identifizieren, woher der None Wert kommt. Betrachten wir einen häufigen Fall, in dem der Fehler auftritt; bei der Arbeit mit einem NumPy-Array. Bei der Arbeit mit einem NumPy Array kann der Fehler auftreten, wenn man mit einem nicht initialisierten Array oder einem, das den Wert None zugewiesen wurde, arbeitet.

Zum Beispiel:

Python

 

import numpy as np
arr = None
print(arr.shape)

Das Ergebnis für oben ist:

Python

 

AttributeError: 'NoneType' object has no attribute 'shape'

Man kann eine gegebene Anweisung überprüfen und feststellen, welchen Variablentyp sie zurückgibt, bevor man auf das Shape-Attribut zugreift. Die Verwendung der if-else Anweisung ist in solchen Fällen nützlich, da sie einem das shape zeigt und None zurückgibt, wenn shape keinen Wert zurückgibt.

Hier ist ein Beispiel:

Python

 

import cv2
img = cv2.imread(r'C:\Users\ADMIN.DESKTOP-KB78BPH\Desktop\New folder
(5)\2.jpg')
if img is not None:
     print(img.shape)
else:
     print('variable is Nonetype object')

Ausgabe:

Python

 

variable is Nonetype object

Im obigen Fall haben wir zuerst den absoluten Pfad angegeben. Der if Block wird nur ausgeführt, wenn die Variable einen gültigen Wert speichert, der nicht None ist, und der else Block wird ausgeführt, wenn der Variablenwert None ist. Wir erhalten die Fehlermeldung variable is Nonetype object, weil der Pfad nicht existiert. Die Schritte funktionieren unabhängig vom Betriebssystem, da man nur den Pfad eingeben muss.

4. Array mit gültigen Werten initialisieren

Eine weitere Option, wenn man einen Fehler bei der Verwendung von NumPy erhält, ist sicherzustellen, dass man gültige Werte verwendet. Dies kann erreicht werden, wenn man Daten aus einer Datei oder einer anderen Quelle liest oder NumPy Funktionen wie zeros und ones verwendet.

Hier modifizieren wir den Code, um das Array mit Nullen zu initialisieren:

Python

 

import numpy as np
arr = np.zeros((3, 3))
print(arr.shape)

Ausgabe:

Python

 

(3, 3)

Schlussfolgerung

Während AttributeError: NoneType Objekt hat kein Attribut shape in der Programmierung häufig vorkommt, gibt es mehrere Möglichkeiten, die Sie wählen und lösen können. Das Wichtigste ist sicherzustellen, dass Sie vor dem Versuch, das Formattierungsattribut eines Objekts zu erreichen, überprüfen, ob es None ist. Wenn es None ist, dann kehre None zurück, andernfalls kehre zum shape zurück.

Sie können nun den Fehler beheben und Probleme weiter lösen.

Source:
https://dzone.com/articles/fix-attributeerror-nonetype-object-has-no-attribut