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:
import numpy as np
arr = np.array([[5, 1], [16, 33]])
print(arr.shape)
Ausgabe:
(2, 2)
Das Shape-Attribut ist auch in pandas oder OpenCV wichtig.
Hier ist, wie das Shape-Attribut in OpenCV verwendet wird:
import cv2
img = cv2.imread(r'C:\Users\ADMIN.DESKTOP-KB78BPH\Desktop\New folder
(2)\2.jpg')
print(img.shape)
Die Ausgabe lautet:
(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.
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:
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:
import numpy as np
arr = None
print(arr.shape)
Das Ergebnis für oben ist:
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:
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:
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:
import numpy as np
arr = np.zeros((3, 3))
print(arr.shape)
Ausgabe:
(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