inspect — Live-Objekte untersuchen¶
Quellcode: Lib/inspect.py
Das Modul inspect stellt mehrere nützliche Funktionen zur Verfügung, um Informationen über Live-Objekte wie Module, Klassen, Methoden, Funktionen, Tracebacks, Frame-Objekte und Code-Objekte zu erhalten. Zum Beispiel kann es Ihnen helfen, den Inhalt einer Klasse zu untersuchen, den Quellcode einer Methode abzurufen, die Argumentenliste für eine Funktion zu extrahieren und zu formatieren oder alle notwendigen Informationen für die Anzeige eines detaillierten Tracebacks zu erhalten.
Es gibt vier Hauptarten von Diensten, die dieses Modul anbietet: Typüberprüfung, Quellcodeabruf, Untersuchung von Klassen und Funktionen sowie die Analyse des Interpreter-Stacks.
Typen und Member¶
Die Funktion inspect.getmembers() ruft die Member eines Objekts wie einer Klasse oder eines Moduls ab. Die Funktionen, deren Namen mit "is" beginnen, sind hauptsächlich als praktische Auswahl für das zweite Argument von inspect.getmembers() vorgesehen. Sie helfen Ihnen auch zu bestimmen, wann Sie die folgenden speziellen Attribute finden können (siehe Importbezogene Attribute von Modulobjekten für Modulattribute)
Typ |
Attribut |
Beschreibung |
|---|---|---|
Klasse |
__doc__ |
documentation string |
__name__ |
Name, unter dem diese Klasse definiert wurde |
|
__qualname__ |
qualifizierter Name |
|
__module__ |
Name des Moduls, in dem diese Klasse definiert wurde |
|
__type_params__ |
Ein Tupel, das die Typ-Parameter einer generischen Klasse enthält |
|
Methode |
__doc__ |
documentation string |
__name__ |
Name, unter dem diese Methode definiert wurde |
|
__qualname__ |
qualifizierter Name |
|
__func__ |
Funktionsobjekt, das die Implementierung der Methode enthält |
|
__self__ |
Instanz, an die diese Methode gebunden ist, oder |
|
__module__ |
Name des Moduls, in dem diese Methode definiert wurde |
|
Funktion |
__doc__ |
documentation string |
__name__ |
Name, unter dem diese Funktion definiert wurde |
|
__qualname__ |
qualifizierter Name |
|
__code__ |
Code-Objekt, das den kompilierten Funktions-Bytecode enthält |
|
__defaults__ |
Tupel aller Standardwerte für positionelle oder Schlüsselwortparameter |
|
__kwdefaults__ |
Mapping aller Standardwerte für nur-Schlüsselwortparameter |
|
__globals__ |
Globaler Namensraum, in dem diese Funktion definiert wurde |
|
__builtins__ |
Builtins-Namensraum |
|
__annotations__ |
Mapping von Parameternamen zu Annotationen; der Schlüssel |
|
__type_params__ |
Ein Tupel, das die Typ-Parameter einer generischen Funktion enthält |
|
__module__ |
Name des Moduls, in dem diese Funktion definiert wurde |
|
traceback |
tb_frame |
Frame-Objekt auf dieser Ebene |
tb_lasti |
Index der zuletzt versuchten Anweisung im Bytecode |
|
tb_lineno |
Aktuelle Zeilennummer im Python-Quellcode |
|
tb_next |
Nächstes inneres Traceback-Objekt (aufgerufen von dieser Ebene) |
|
frame |
f_back |
Nächstes äußeres Frame-Objekt (Aufrufer dieses Frames) |
f_builtins |
Builtins-Namensraum, der von diesem Frame gesehen wird |
|
f_code |
Code-Objekt, das in diesem Frame ausgeführt wird |
|
f_globals |
Globaler Namensraum, der von diesem Frame gesehen wird |
|
f_lasti |
Index der zuletzt versuchten Anweisung im Bytecode |
|
f_lineno |
Aktuelle Zeilennummer im Python-Quellcode |
|
f_locals |
Lokaler Namensraum, der von diesem Frame gesehen wird |
|
f_generator |
Gibt das Generator- oder Coroutine-Objekt zurück, dem dieser Frame gehört, oder |
|
f_trace |
Trace-Funktion für diesen Frame oder |
|
f_trace_lines |
Gibt an, ob ein Trace-Ereignis für jede Quellcodezeile ausgelöst wird |
|
f_trace_opcodes |
Gibt an, ob pro Opcode Ereignisse angefordert werden |
|
clear() |
Wird verwendet, um alle Referenzen auf lokale Variablen zu löschen |
|
code |
co_argcount |
Anzahl der Argumente (ohne nur-Schlüsselwortargumente, \* oder \*\* args) |
co_code |
String mit rohem kompiliertem Bytecode |
|
co_cellvars |
Tupel der Namen von Zellvariablen (referenziert von enthaltenden Scopes) |
|
co_consts |
Tupel der Konstanten, die im Bytecode verwendet werden |
|
co_filename |
Name der Datei, in der dieses Code-Objekt erstellt wurde |
|
co_firstlineno |
Nummer der ersten Zeile im Python-Quellcode |
|
co_flags |
Bitmap von |
|
co_lnotab |
Kodierte Zuordnung von Zeilennummern zu Bytecode-Indizes |
|
co_freevars |
Tupel der Namen von freien Variablen (referenziert über die Closure einer Funktion) |
|
co_posonlyargcount |
Anzahl der nur positionellen Argumente |
|
co_kwonlyargcount |
Anzahl der nur Schlüsselwortargumente (ohne \*\* arg) |
|
co_name |
Name, unter dem dieses Code-Objekt definiert wurde |
|
co_qualname |
Vollqualifizierter Name, unter dem dieses Code-Objekt definiert wurde |
|
co_names |
Tupel von Namen außer Argumenten und lokalen Funktionsvariablen |
|
co_nlocals |
Anzahl der lokalen Variablen |
|
co_stacksize |
Erforderlicher Stack-Speicher für die virtuelle Maschine |
|
co_varnames |
Tupel der Namen von Argumenten und lokalen Variablen |
|
co_lines() |
Gibt einen Iterator zurück, der aufeinanderfolgende Bytecode-Bereiche liefert |
|
co_positions() |
Gibt einen Iterator von Quellcode-Positionen für jede Bytecode-Anweisung zurück |
|
replace() |
Gibt eine Kopie des Code-Objekts mit neuen Werten zurück |
|
generator |
__name__ |
Name |
__qualname__ |
qualifizierter Name |
|
gi_frame |
frame |
|
gi_running |
Läuft der Generator? |
|
gi_suspended |
Ist der Generator ausgesetzt? |
|
gi_code |
code |
|
gi_yieldfrom |
Objekt, das gerade von |
|
Asynchroner Generator |
__name__ |
Name |
__qualname__ |
qualifizierter Name |
|
ag_await |
Auf welches Objekt wird gewartet, oder |
|
ag_frame |
frame |
|
ag_running |
Läuft der Generator? |
|
ag_code |
code |
|
Coroutine |
__name__ |
Name |
__qualname__ |
qualifizierter Name |
|
cr_await |
Auf welches Objekt wird gewartet, oder |
|
cr_frame |
frame |
|
cr_running |
Läuft die Coroutine? |
|
cr_code |
code |
|
cr_origin |
Wo die Coroutine erstellt wurde, oder |
|
Builtin |
__doc__ |
documentation string |
__name__ |
Ursprünglicher Name dieser Funktion oder Methode |
|
__qualname__ |
qualifizierter Name |
|
__self__ |
Instanz, an die eine Methode gebunden ist, oder |
Geändert in Version 3.5: Hinzufügen der Attribute __qualname__ und gi_yieldfrom zu Generatoren.
Das Attribut __name__ von Generatoren wird nun aus dem Funktionsnamen anstelle des Codenamens gesetzt und kann nun geändert werden.
Geändert in Version 3.7: Hinzufügen des Attributs cr_origin zu Coroutinen.
Geändert in Version 3.10: Hinzufügen des Attributs __builtins__ zu Funktionen.
Geändert in Version 3.14: Hinzufügen des Attributs f_generator zu Frames.
- inspect.getmembers(object[, predicate])¶
Gibt alle Member eines Objekts als Liste von Tupeln
(name, value)zurück, sortiert nach Namen. Wenn das optionale Argument predicate - das mit demvalue-Objekt jedes Members aufgerufen wird - angegeben ist, werden nur Member eingeschlossen, für die das Prädikat einen wahren Wert zurückgibt.Hinweis
getmembers()gibt nur Klassenattribute zurück, die in der Metaklasse definiert sind, wenn das Argument eine Klasse ist und diese Attribute in der benutzerdefinierten__dir__()der Metaklasse aufgeführt wurden.
- inspect.getmembers_static(object[, predicate])¶
Gibt alle Member eines Objekts als Liste von Tupeln
(name, value)zurück, sortiert nach Namen, ohne die dynamische Suche über das Deskriptor-Protokoll, \_\_getattr\_\_ oder \_\_getattribute\_\_ auszulösen. Optional werden nur Member zurückgegeben, die ein gegebenes Prädikat erfüllen.Hinweis
getmembers_static()kann möglicherweise nicht alle Member abrufen, diegetmembersabrufen kann (z. B. dynamisch erstellte Attribute) und kann Member finden, diegetmembersnicht finden kann (z. B. Deskriptoren, die AttributeError auslösen). In einigen Fällen kann es auch Deskriptorobjekte anstelle von Instanzmembern zurückgeben.Hinzugefügt in Version 3.11.
- inspect.getmodulename(path)¶
Gibt den Namen des durch die Datei path benannten Moduls zurück, ohne die Namen der übergeordneten Pakete einzuschließen. Die Dateierweiterung wird mit allen Einträgen in
importlib.machinery.all_suffixes()verglichen. Wenn sie übereinstimmt, wird die letzte Komponente des Pfades mit entfernten Erweiterung zurückgegeben. Andernfalls wirdNonezurückgegeben.Beachten Sie, dass diese Funktion nur einen aussagekräftigen Namen für tatsächliche Python-Module zurückgibt – Pfade, die potenziell auf Python-Pakete verweisen, geben weiterhin
Nonezurück.Geändert in Version 3.3: Die Funktion basiert direkt auf
importlib.
- inspect.ismodule(object)¶
Gibt
Truezurück, wenn das Objekt ein Modul ist.
- inspect.isclass(object)¶
Gibt
Truezurück, wenn das Objekt eine Klasse ist, sei es eine eingebaute oder eine in Python-Code erstellte.
- inspect.ismethod(object)¶
Gibt
Truezurück, wenn das Objekt eine gebundene Methode ist, die in Python geschrieben wurde.
- inspect.ispackage(object)¶
Gibt
Truezurück, wenn das Objekt ein Paket ist.Hinzugefügt in Version 3.14.
- inspect.isfunction(object)¶
Gibt
Truezurück, wenn das Objekt eine Python-Funktion ist, was auch Funktionen einschließt, die durch einen Lambda-Ausdruck erstellt wurden.
- inspect.isgeneratorfunction(object)¶
Gibt
Truezurück, wenn das Objekt eine Python-Generatorfunktion ist.Geändert in Version 3.8: Funktionen, die in
functools.partial()verpackt sind, geben nunTruezurück, wenn die verpackte Funktion eine Python-Generatorfunktion ist.Geändert in Version 3.13: Funktionen, die in
functools.partialmethod()verpackt sind, geben nunTruezurück, wenn die verpackte Funktion eine Python-Generatorfunktion ist.
- inspect.isgenerator(object)¶
Gibt
Truezurück, wenn das Objekt ein Generator ist.
- inspect.iscoroutinefunction(object)¶
Gibt
Truezurück, wenn das Objekt eine Coroutine-Funktion ist (eine Funktion, die mit derasync def-Syntax definiert wurde), einefunctools.partial(), die eine Coroutine-Funktion umschließt, oder eine synchrone Funktion, die mitinspect.markcoroutinefunction()markiert ist.Hinzugefügt in Version 3.5.
Geändert in Version 3.8: Funktionen, die in
functools.partial()verpackt sind, geben nunTruezurück, wenn die verpackte Funktion eine Coroutine-Funktion ist.Geändert in Version 3.12: Synchrone Funktionen, die mit
inspect.markcoroutinefunction()markiert sind, geben nunTruezurück.Geändert in Version 3.13: Funktionen, die in
functools.partialmethod()verpackt sind, geben nunTruezurück, wenn die verpackte Funktion eine Coroutine-Funktion ist.
- inspect.markcoroutinefunction(func)¶
Dekorator, um ein aufrufbares Objekt als Coroutine-Funktion zu markieren, falls es sonst nicht von
inspect.iscoroutinefunction()erkannt würde.Dies kann für synchrone Funktionen nützlich sein, die eine Coroutine zurückgeben, wenn die Funktion an eine API übergeben wird, die
inspect.iscoroutinefunction()erwartet.Wenn möglich, ist die Verwendung einer
async def-Funktion vorzuziehen. Ebenso akzeptabel ist das Aufrufen der Funktion und das Testen des Rückgabewerts mitinspect.iscoroutine().Hinzugefügt in Version 3.12.
- inspect.iscoroutine(object)¶
Gibt
Truezurück, wenn das Objekt eine Coroutine ist, die von einerasync def-Funktion erstellt wurde.Hinzugefügt in Version 3.5.
- inspect.isawaitable(object)¶
Gibt
Truezurück, wenn das Objekt in einemawait-Ausdruck verwendet werden kann.Kann auch verwendet werden, um Generator-basierte Coroutinen von regulären Generatoren zu unterscheiden
import types def gen(): yield @types.coroutine def gen_coro(): yield assert not isawaitable(gen()) assert isawaitable(gen_coro())
Hinzugefügt in Version 3.5.
- inspect.isasyncgenfunction(object)¶
Gibt
Truezurück, wenn das Objekt eine Funktion für asynchrone Generatoren ist, zum Beispiel>>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True
Hinzugefügt in Version 3.6.
Geändert in Version 3.8: Funktionen, die in
functools.partial()verpackt sind, geben nunTruezurück, wenn die verpackte Funktion eine Funktion für asynchrone Generatoren ist.Geändert in Version 3.13: Funktionen, die in
functools.partialmethod()verpackt sind, geben nunTruezurück, wenn die verpackte Funktion eine Coroutine-Funktion ist.
- inspect.isasyncgen(object)¶
Gibt
Truezurück, wenn das Objekt ein Iterator für asynchrone Generatoren ist, der von einer Funktion für asynchrone Generatoren erstellt wurde.Hinzugefügt in Version 3.6.
- inspect.istraceback(object)¶
Gibt
Truezurück, wenn das Objekt ein Traceback ist.
- inspect.isframe(object)¶
Gibt
Truezurück, wenn das Objekt ein Frame ist.
- inspect.iscode(object)¶
Gibt
Truezurück, wenn das Objekt ein Code ist.
- inspect.isbuiltin(object)¶
Gibt
Truezurück, wenn das Objekt eine eingebaute Funktion oder eine gebundene eingebaute Methode ist.
- inspect.ismethodwrapper(object)¶
Gibt
Truezurück, wenn der Typ des Objekts einMethodWrapperTypeist.Dies sind Instanzen von
MethodWrapperType, wie z. B.__str__(),__eq__()und__repr__().Hinzugefügt in Version 3.11.
- inspect.isroutine(object)¶
Gibt
Truezurück, wenn das Objekt eine benutzerdefinierte oder eingebaute Funktion oder Methode ist.
- inspect.isabstract(object)¶
Gibt
Truezurück, wenn das Objekt eine abstrakte Basisklasse ist.
- inspect.ismethoddescriptor(object)¶
Gibt
Truezurück, wenn das Objekt ein Methoden-Deskriptor ist, aber nicht, wennismethod(),isclass(),isfunction()oderisbuiltin()wahr sind.Dies trifft zum Beispiel auf
int.__add__zu. Ein Objekt, das diesen Test besteht, hat eine__get__()-Methode, aber keine__set__()-Methode oder eine__delete__()-Methode. Darüber hinaus variiert die Menge der Attribute. Ein__name__-Attribut ist normalerweise sinnvoll, und__doc__ist es oft.Methoden, die über Deskriptoren implementiert sind und auch einen der anderen Tests bestehen, geben
Falsevomismethoddescriptor()-Test zurück, einfach weil die anderen Tests mehr versprechen – Sie können zum Beispiel auf das Attribut__func__(usw.) zählen, wenn ein Objektismethod()besteht.Geändert in Version 3.13: Diese Funktion meldet nicht mehr fälschlicherweise Objekte mit
__get__()und__delete__(), aber nicht__set__(), als Methoden-Deskriptoren (solche Objekte sind Daten-Deskriptoren, keine Methoden-Deskriptoren).
- inspect.isdatadescriptor(object)¶
Gibt
Truezurück, wenn das Objekt ein Daten-Deskriptor ist.Daten-Deskriptoren haben eine
__set__- oder eine__delete__-Methode. Beispiele sind Properties (in Python definiert), Getsets und Member. Letztere beiden sind in C definiert und es gibt spezifischere Tests für diese Typen, die über Python-Implementierungen hinweg robust sind. Typischerweise haben Daten-Deskriptoren auch__name__- und__doc__-Attribute (Properties, Getsets und Member haben beide Attribute), dies ist jedoch nicht garantiert.
- inspect.isgetsetdescriptor(object)¶
Gibt
Truezurück, wenn das Objekt ein Getset-Deskriptor ist.CPython Implementierungsdetail: getsets sind Attribute, die in Erweiterungsmodulen über
PyGetSetDef-Strukturen definiert sind. Für Python-Implementierungen ohne solche Typen gibt diese Methode immerFalsezurück.
- inspect.ismemberdescriptor(object)¶
Gibt
Truezurück, wenn das Objekt ein Member-Deskriptor ist.CPython Implementierungsdetail: Member-Deskriptoren sind Attribute, die in Erweiterungsmodulen über
PyMemberDef-Strukturen definiert sind. Für Python-Implementierungen ohne solche Typen gibt diese Methode immerFalsezurück.
Abrufen des Quellcodes¶
- inspect.getdoc(object)¶
Ruft den Dokumentationsstring eines Objekts ab, bereinigt mit
cleandoc(). Wenn der Dokumentationsstring für ein Objekt nicht angegeben ist und das Objekt eine Klasse, eine Methode, eine Eigenschaft oder ein Deskriptor ist, wird der Dokumentationsstring aus der Vererbungshierarchie abgerufen. GibtNonezurück, wenn der Dokumentationsstring ungültig oder fehlend ist.Geändert in Version 3.5: Dokumentationsstrings werden jetzt vererbt, wenn sie nicht überschrieben werden.
- inspect.getcomments(object)¶
Gibt alle Kommentarzeilen, die sich unmittelbar vor dem Quellcode des Objekts befinden (für eine Klasse, Funktion oder Methode) oder am Anfang der Python-Quelldatei (wenn das Objekt ein Modul ist) in einer einzigen Zeichenkette zurück. Wenn der Quellcode des Objekts nicht verfügbar ist, wird
Nonezurückgegeben. Dies kann passieren, wenn das Objekt in C oder in der interaktiven Shell definiert wurde.
- inspect.getfile(object)¶
Gibt den Namen der (Text- oder Binär-)Datei zurück, in der ein Objekt definiert wurde. Dies führt zu einem
TypeError, wenn das Objekt ein eingebautes Modul, eine Klasse oder eine Funktion ist.
- inspect.getmodule(object)¶
Versucht zu erraten, in welchem Modul ein Objekt definiert wurde. Gibt
Nonezurück, wenn das Modul nicht bestimmt werden kann.
- inspect.getsourcefile(object)¶
Gibt den Namen der Python-Quelldatei zurück, in der ein Objekt definiert wurde, oder
None, wenn kein Weg gefunden werden kann, die Quelle zu erhalten. Dies führt zu einemTypeError, wenn das Objekt ein eingebautes Modul, eine Klasse oder eine Funktion ist.
- inspect.getsourcelines(object)¶
Gibt eine Liste von Quellzeilen und die startende Zeilennummer für ein Objekt zurück. Das Argument kann ein Modul, eine Klasse, eine Methode, eine Funktion, ein Traceback, ein Frame oder ein Codeobjekt sein. Der Quellcode wird als Liste der Zeilen zurückgegeben, die dem Objekt entsprechen, und die Zeilennummer gibt an, wo in der ursprünglichen Quelldatei die erste Codezeile gefunden wurde. Ein
OSErrorwird ausgelöst, wenn der Quellcode nicht abgerufen werden kann. EinTypeErrorwird ausgelöst, wenn das Objekt ein eingebautes Modul, eine Klasse oder eine Funktion ist.
- inspect.getsource(object)¶
Gibt den Quelltext eines Objekts zurück. Das Argument kann ein Modul, eine Klasse, eine Methode, eine Funktion, ein Traceback, ein Frame oder ein Codeobjekt sein. Der Quellcode wird als einzelne Zeichenkette zurückgegeben. Ein
OSErrorwird ausgelöst, wenn der Quellcode nicht abgerufen werden kann. EinTypeErrorwird ausgelöst, wenn das Objekt ein eingebautes Modul, eine Klasse oder eine Funktion ist.
- inspect.cleandoc(doc)¶
Bereinigt die Einrückung von Docstrings, die eingerückt sind, um mit Codeblöcken bündig abzuschließen.
Alle führenden Leerzeichen werden von der ersten Zeile entfernt. Alle führenden Leerzeichen, die gleichmäßig von der zweiten Zeile an entfernt werden können, werden entfernt. Leere Zeilen am Anfang und Ende werden anschließend entfernt. Außerdem werden alle Tabs in Leerzeichen umgewandelt.
Introspektive aufrufbare Objekte mit dem Signatur-Objekt¶
Hinzugefügt in Version 3.3.
Das Signature-Objekt repräsentiert die Aufrufsignatur eines aufrufbaren Objekts und dessen Rückgabeannotation. Um ein Signature-Objekt abzurufen, verwenden Sie die Funktion signature().
- inspect.signature(callable, *, follow_wrapped=True, globals=None, locals=None, eval_str=False, annotation_format=Format.VALUE)¶
Gibt ein
Signature-Objekt für das gegebene callable zurück>>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): ... pass >>> sig = signature(foo) >>> str(sig) '(a, *, b: int, **kwargs)' >>> str(sig.parameters['b']) 'b: int' >>> sig.parameters['b'].annotation <class 'int'>
Akzeptiert eine breite Palette von Python-aufrufbaren Objekten, von einfachen Funktionen und Klassen bis hin zu
functools.partial()-Objekten.Wenn einige der Annotationen Zeichenketten sind (z. B. weil
from __future__ import annotationsverwendet wurde), versuchtsignature(), die Annotationen mithilfe vonannotationlib.get_annotations()automatisch zu de-stringifizieren. Die Parameter globals, locals und eval_str werden beim Auflösen der Annotationen anannotationlib.get_annotations()übergeben; siehe die Dokumentation fürannotationlib.get_annotations()für Anweisungen zur Verwendung dieser Parameter. Ein Mitglied derannotationlib.Format-Enumeration kann an den Parameter annotation_format übergeben werden, um das Format der zurückgegebenen Annotationen zu steuern. Verwenden Sie beispielsweiseannotation_format=annotationlib.Format.STRING, um Annotationen im Zeichenkettenformat zurückzugeben.Löst
ValueErroraus, wenn keine Signatur bereitgestellt werden kann, undTypeError, wenn dieser Objekttyp nicht unterstützt wird. Außerdem können dieeval()-Aufrufe zum De-stringifizieren der Annotationen inannotationlib.get_annotations(), wenn die Annotationen als Zeichenketten vorliegen und eval_str nicht falsch ist, potenziell jede Art von Ausnahme auslösen.Ein Schrägstrich (/) in der Signatur einer Funktion zeigt an, dass die Parameter davor Positionsargumente sein müssen. Weitere Informationen finden Sie im FAQ-Eintrag zu Positionsargumenten.
Geändert in Version 3.5: Der Parameter follow_wrapped wurde hinzugefügt. Übergeben Sie
False, um speziell die Signatur von callable zu erhalten (callable.__wrapped__wird nicht verwendet, um dekorierte aufrufbare Objekte zu entpacken).Geändert in Version 3.10: Die Parameter globals, locals und eval_str wurden hinzugefügt.
Geändert in Version 3.14: Der Parameter annotation_format wurde hinzugefügt.
Hinweis
Einige aufrufbare Objekte sind in bestimmten Implementierungen von Python möglicherweise nicht introspektiv. Zum Beispiel bieten einige in C definierte eingebaute Funktionen in CPython keine Metadaten über ihre Argumente.
CPython Implementierungsdetail: Wenn das übergebene Objekt ein Attribut
__signature__hat, können wir es zur Erstellung der Signatur verwenden. Die genaue Semantik ist ein Implementierungsdetail und unterliegt unangekündigten Änderungen. Konsultieren Sie den Quellcode für die aktuelle Semantik.
- class inspect.Signature(parameters=None, *, return_annotation=Signature.empty)¶
Ein
Signature-Objekt repräsentiert die Aufrufsignatur einer Funktion und deren Rückgabeannotation. Für jeden von der Funktion akzeptierten Parameter speichert es einParameter-Objekt in seinerparameters-Sammlung.Das optionale Argument parameters ist eine Sequenz von
Parameter-Objekten, die daraufhin geprüft wird, ob keine Parameter mit doppelten Namen vorhanden sind und ob die Parameter in der richtigen Reihenfolge stehen, d. h. zuerst Positionsargumente, dann Positions- oder Schlüsselwortargumente, und dass Parameter mit Standardwerten auf Parameter ohne Standardwerte folgen.Das optionale Argument return_annotation kann ein beliebiges Python-Objekt sein. Es repräsentiert die „Rückgabe“-Annotation des aufrufbaren Objekts.
Signature-Objekte sind unveränderlich. Verwenden SieSignature.replace()odercopy.replace(), um eine modifizierte Kopie zu erstellen.Geändert in Version 3.5:
Signature-Objekte sind jetzt pickelbar und hashable.- empty¶
Ein spezieller Marker auf Klassenebene zur Angabe des Fehlens einer Rückgabeannotation.
- parameters¶
Eine geordnete Abbildung von Parameternamen zu den entsprechenden
Parameter-Objekten. Parameter erscheinen in strikter Definitionsreihenfolge, einschließlich Keyword-only-Parametern.Geändert in Version 3.7: Python garantierte explizit, dass es die Deklarationsreihenfolge von Keyword-only-Parametern ab Version 3.7 beibehielt, obwohl diese Reihenfolge in Python 3 in der Praxis immer beibehalten worden war.
- return_annotation¶
Die „Rückgabe“-Annotation für das aufrufbare Objekt. Wenn das aufrufbare Objekt keine „Rückgabe“-Annotation hat, ist dieses Attribut auf
Signature.emptygesetzt.
- bind(*args, **kwargs)¶
Erstellt eine Abbildung von Positions- und Schlüsselwortargumenten zu Parametern. Gibt
BoundArgumentszurück, wenn*argsund**kwargsmit der Signatur übereinstimmen, oder löst einenTypeErroraus.
- bind_partial(*args, **kwargs)¶
Funktioniert genauso wie
Signature.bind(), erlaubt aber das Weglassen einiger erforderlicher Argumente (ahmt das Verhalten vonfunctools.partial()nach). GibtBoundArgumentszurück oder löst einenTypeErroraus, wenn die übergebenen Argumente nicht mit der Signatur übereinstimmen.
- replace(*[, parameters][, return_annotation])¶
Erstellt eine neue
Signature-Instanz basierend auf der Instanz, auf derreplace()aufgerufen wurde. Es ist möglich, unterschiedliche parameters und/oder return_annotation zu übergeben, um die entsprechenden Eigenschaften der Basis-Signatur zu überschreiben. Umreturn_annotationaus der kopiertenSignaturezu entfernen, übergeben SieSignature.empty.>>> def test(a, b): ... pass ... >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"
Signature-Objekte werden auch von der generischen Funktioncopy.replace()unterstützt.
- format(*, max_width=None, quote_annotation_strings=True)¶
Erstellt eine Zeichenkettendarstellung des
Signature-Objekts.Wenn max_width übergeben wird, versucht die Methode, die Signatur in Zeilen von höchstens max_width Zeichen anzupassen. Wenn die Signatur länger als max_width ist, werden alle Parameter auf separaten Zeilen stehen.
Wenn quote_annotation_strings False ist, werden Annotationen in der Signatur ohne öffnende und schließende Anführungszeichen angezeigt, wenn es sich um Zeichenketten handelt. Dies ist nützlich, wenn die Signatur mit dem Format
STRINGerstellt wurde oder wennfrom __future__ import annotationsverwendet wurde.Hinzugefügt in Version 3.13.
Geändert in Version 3.14: Der Parameter unquote_annotations wurde hinzugefügt.
- classmethod from_callable(obj, *, follow_wrapped=True, globals=None, locals=None, eval_str=False)¶
Gibt ein
Signature(oder seine Unterklasse) Objekt für ein gegebenes aufrufbare Objekt obj zurück.Diese Methode vereinfacht das Erstellen von Unterklassen von
Signatureclass MySignature(Signature): pass sig = MySignature.from_callable(sum) assert isinstance(sig, MySignature)
Ihr Verhalten ist ansonsten identisch mit dem von
signature().Hinzugefügt in Version 3.5.
Geändert in Version 3.10: Die Parameter globals, locals und eval_str wurden hinzugefügt.
- class inspect.Parameter(name, kind, *, default=Parameter.empty, annotation=Parameter.empty)¶
Parameter-Objekte sind unveränderlich. Anstatt einParameter-Objekt zu ändern, können SieParameter.replace()odercopy.replace()verwenden, um eine modifizierte Kopie zu erstellen.Geändert in Version 3.5: Parameter-Objekte sind jetzt pickelbar und hashable.
- empty¶
Ein spezieller Marker auf Klassenebene zur Angabe des Fehlens von Standardwerten und Annotationen.
- name¶
Der Name des Parameters als Zeichenkette. Der Name muss ein gültiger Python-Bezeichner sein.
CPython Implementierungsdetail: CPython generiert implizite Parameternamen der Form
.0für die Codeobjekte, die zur Implementierung von Comprehensions und Generatorausdrücken verwendet werden.Geändert in Version 3.6: Diese Parameternamen werden jetzt von diesem Modul als Namen wie
implicit0exponiert.
- default¶
Der Standardwert für den Parameter. Wenn der Parameter keinen Standardwert hat, ist dieses Attribut auf
Parameter.emptygesetzt.
- annotation¶
Die Annotation für den Parameter. Wenn der Parameter keine Annotation hat, ist dieses Attribut auf
Parameter.emptygesetzt.
- kind¶
Beschreibt, wie Argumentwerte an den Parameter gebunden werden. Die möglichen Werte sind über
Parameterzugänglich (wie z. B.Parameter.KEYWORD_ONLY) und unterstützen Vergleiche und Sortierung in folgender Reihenfolge:Name
Bedeutung
POSITIONAL_ONLY
Der Wert muss als Positionsargument übergeben werden. Positionsargumente sind solche, die in einer Python-Funktionsdefinition vor einem
/-Eintrag (falls vorhanden) stehen.POSITIONAL_OR_KEYWORD
Der Wert kann als Schlüsselwort- oder Positionsargument übergeben werden (dies ist das Standardverhalten für in Python implementierte Funktionen).
VAR_POSITIONAL
Ein Tupel von Positionsargumenten, die keinem anderen Parameter zugeordnet sind. Dies entspricht einem
*args-Parameter in einer Python-Funktionsdefinition.KEYWORD_ONLY
Der Wert muss als Schlüsselwortargument übergeben werden. Keyword-only-Parameter sind solche, die nach einem
*- oder*args-Eintrag in einer Python-Funktionsdefinition stehen.VAR_KEYWORD
Ein Wörterbuch von Schlüsselwortargumenten, die keinem anderen Parameter zugeordnet sind. Dies entspricht einem
**kwargs-Parameter in einer Python-Funktionsdefinition.Beispiel: Alle Keyword-only-Argumente ohne Standardwerte ausgeben
>>> def foo(a, b, *, c, d=10): ... pass >>> sig = signature(foo) >>> for param in sig.parameters.values(): ... if (param.kind == param.KEYWORD_ONLY and ... param.default is param.empty): ... print('Parameter:', param) Parameter: c
- kind.description¶
Beschreibt einen Enum-Wert von
Parameter.kind.Hinzugefügt in Version 3.8.
Beispiel: Alle Beschreibungen von Argumenten ausgeben
>>> def foo(a, b, *, c, d=10): ... pass >>> sig = signature(foo) >>> for param in sig.parameters.values(): ... print(param.kind.description) positional or keyword positional or keyword keyword-only keyword-only
- replace(*[, name][, kind][, default][, annotation])¶
Erstellt eine neue
Parameter-Instanz basierend auf der Instanz, auf der replace aufgerufen wurde. Um einParameter-Attribut zu überschreiben, übergeben Sie das entsprechende Argument. Um einen Standardwert und/oder eine Annotation aus einemParameterzu entfernen, übergeben SieParameter.empty.>>> from inspect import Parameter >>> param = Parameter('foo', Parameter.KEYWORD_ONLY, default=42) >>> str(param) 'foo=42' >>> str(param.replace()) # Will create a shallow copy of 'param' 'foo=42' >>> str(param.replace(default=Parameter.empty, annotation='spam')) "foo: 'spam'"
Parameter-Objekte werden auch von der generischen Funktioncopy.replace()unterstützt.
Geändert in Version 3.4: In Python 3.3 war es
Parameter-Objekten erlaubt,nameaufNonezu setzen, wenn ihrkindaufPOSITIONAL_ONLYgesetzt war. Dies ist nun nicht mehr erlaubt.
- class inspect.BoundArguments¶
Ergebnis eines Aufrufs von
Signature.bind()oderSignature.bind_partial(). Enthält die Zuordnung von Argumenten zu den Parametern der Funktion.- arguments¶
Eine veränderbare Zuordnung von Parameternamen zu Argumentwerten. Enthält nur explizit gebundene Argumente. Änderungen in
argumentsspiegeln sich inargsundkwargswider.Sollte zusammen mit
Signature.parametersfür alle Argumentverarbeitungszwecke verwendet werden.Hinweis
Argumente, für die
Signature.bind()oderSignature.bind_partial()auf einen Standardwert zurückgegriffen haben, werden übersprungen. Falls erforderlich, können SieBoundArguments.apply_defaults()verwenden, um sie hinzuzufügen.Geändert in Version 3.9:
argumentsist jetzt vom Typdict. Zuvor war es vom Typcollections.OrderedDict.
- kwargs¶
Ein Dictionary von Schlüsselwortargumentwerten. Dynamisch berechnet aus dem
arguments-Attribut. Argumente, die positionell übergeben werden können, sind stattdessen inargsenthalten.
- apply_defaults()¶
Setzt Standardwerte für fehlende Argumente.
Für variable Positionsargumente (
*args) ist der Standardwert ein leeres Tupel.Für variable Schlüsselwortargumente (
**kwargs) ist der Standardwert ein leeres Dictionary.>>> def foo(a, b='ham', *args): pass >>> ba = inspect.signature(foo).bind('spam') >>> ba.apply_defaults() >>> ba.arguments {'a': 'spam', 'b': 'ham', 'args': ()}
Hinzugefügt in Version 3.5.
Die Eigenschaften
argsundkwargskönnen verwendet werden, um Funktionen aufzurufendef test(a, *, b): ... sig = signature(test) ba = sig.bind(10, b=20) test(*ba.args, **ba.kwargs)
Siehe auch
- PEP 362 - Objekt für Funktionssignaturen.
Die detaillierte Spezifikation, Implementierungsdetails und Beispiele.
Klassen und Funktionen¶
- inspect.getclasstree(classes, unique=False)¶
Ordnet die gegebene Liste von Klassen in eine Hierarchie von verschachtelten Listen an. Wo eine verschachtelte Liste erscheint, enthält sie Klassen, die von der Klasse abgeleitet sind, deren Eintrag der Liste unmittelbar vorangeht. Jeder Eintrag ist ein 2-Tupel, das eine Klasse und ein Tupel ihrer Basisklassen enthält. Wenn das Argument unique wahr ist, erscheint genau ein Eintrag in der zurückgegebenen Struktur für jede Klasse in der gegebenen Liste. Andernfalls erscheinen Klassen, die Mehrfachvererbung verwenden, und ihre Nachkommen mehrmals.
- inspect.getfullargspec(func)¶
Ruft die Namen und Standardwerte der Parameter einer Python-Funktion ab. Ein named tuple wird zurückgegeben
FullArgSpec(args, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, annotations)args ist eine Liste der Namen von Positionsargumenten. varargs ist der Name des
*-Parameters oderNone, wenn keine beliebigen Positionsargumente akzeptiert werden. varkw ist der Name des**-Parameters oderNone, wenn keine beliebigen Schlüsselwortargumente akzeptiert werden. defaults ist ein n-Tupel von Standardargumentwerten, die den letzten n Positionsargumenten entsprechen, oderNone, wenn keine solchen Standardwerte definiert sind. kwonlyargs ist eine Liste von Namen von nur-Schlüsselwortargumenten in der Reihenfolge der Deklaration. kwonlydefaults ist ein Dictionary, das Parameternamen aus kwonlyargs auf die Standardwerte abbildet, die verwendet werden, wenn kein Argument angegeben wird. annotations ist ein Dictionary, das Parameternamen auf Annotationen abbildet. Der spezielle Schlüssel"return"wird verwendet, um die Anmerkung des Rückgabewerts der Funktion (falls vorhanden) zu melden.Beachten Sie, dass
signature()und Objekt für Signaturen die empfohlene API für die Introspektion von aufrufbaren Objekten bereitstellen und zusätzliche Verhaltensweisen unterstützen (wie positionsbasierte Argumente), die manchmal in APIs von Erweiterungsmodulen vorkommen. Diese Funktion wird hauptsächlich für Code beibehalten, der die Kompatibilität mit der Python 2inspect-Modul-API gewährleisten muss.Geändert in Version 3.4: Diese Funktion basiert nun auf
signature(), ignoriert aber immer noch__wrapped__-Attribute und schließt den bereits gebundenen ersten Parameter in die Signaturenausgabe für gebundene Methoden ein.Geändert in Version 3.6: Diese Methode wurde zuvor zugunsten von
signature()in Python 3.5 als veraltet dokumentiert, aber diese Entscheidung wurde rückgängig gemacht, um eine klar unterstützte Standardoberfläche für Code, der von der Legacy-APIgetargspec()weg migriert und Python 2/3-kompatibel ist, wiederherzustellen.Geändert in Version 3.7: Python garantierte explizit, dass es die Deklarationsreihenfolge von Keyword-only-Parametern ab Version 3.7 beibehielt, obwohl diese Reihenfolge in Python 3 in der Praxis immer beibehalten worden war.
- inspect.getargvalues(frame)¶
Ruft Informationen über Argumente ab, die an einen bestimmten Frame übergeben wurden. Ein named tuple
ArgInfo(args, varargs, keywords, locals)wird zurückgegeben. args ist eine Liste der Argumentnamen. varargs und keywords sind die Namen der*- und**-Argumente oderNone. locals ist das Locals-Dictionary des gegebenen Frames.Hinweis
Diese Funktion wurde in Python 3.5 versehentlich als veraltet markiert.
- inspect.formatargvalues(args[, varargs, varkw, locals, formatarg, formatvarargs, formatvarkw, formatvalue])¶
Formatiert eine übersichtliche Argumentdefinition aus den vier Werten, die von
getargvalues()zurückgegeben werden. Die Argumente format* sind die entsprechenden optionalen Formatierungsfunktionen, die aufgerufen werden, um Namen und Werte in Zeichenfolgen umzuwandeln.Hinweis
Diese Funktion wurde in Python 3.5 versehentlich als veraltet markiert.
- inspect.getmro(cls)¶
Gibt ein Tupel der Basisklassen von Klasse cls zurück, einschließlich cls, in der Reihenfolge der Methodenauflösung (Method Resolution Order). Keine Klasse erscheint mehr als einmal in diesem Tupel. Beachten Sie, dass die Reihenfolge der Methodenauflösung vom Typ von cls abhängt. Sofern keine sehr seltsame benutzerdefinierte Metaklasse verwendet wird, ist cls das erste Element des Tupels.
- inspect.getcallargs(func, /, *args, **kwds)¶
Bindet die Argumente args und kwds an die Argumentnamen der Python-Funktion oder -Methode func, als ob sie mit ihnen aufgerufen worden wäre. Für gebundene Methoden werden auch das erste Argument (typischerweise
selfgenannt) an die zugehörige Instanz gebunden. Ein Dictionary wird zurückgegeben, das die Argumentnamen (einschließlich der Namen der*- und**-Argumente, falls vorhanden) ihren Werten aus args und kwds zuordnet. Im Falle eines fehlerhaften Aufrufs von func, d. h. wann immerfunc(*args, **kwds)aufgrund einer inkompatiblen Signatur eine Ausnahme auslösen würde, wird eine Ausnahme vom gleichen Typ und mit der gleichen oder ähnlichen Meldung ausgelöst. Zum Beispiel>>> from inspect import getcallargs >>> def f(a, b=1, *pos, **named): ... pass ... >>> getcallargs(f, 1, 2, 3) == {'a': 1, 'named': {}, 'b': 2, 'pos': (3,)} True >>> getcallargs(f, a=2, x=4) == {'a': 2, 'named': {'x': 4}, 'b': 1, 'pos': ()} True >>> getcallargs(f) Traceback (most recent call last): ... TypeError: f() missing 1 required positional argument: 'a'
Hinzugefügt in Version 3.2.
Veraltet seit Version 3.5: Verwenden Sie stattdessen
Signature.bind()undSignature.bind_partial().
- inspect.getclosurevars(func)¶
Ruft die Zuordnung von externen Namensreferenzen in einer Python-Funktion oder -Methode func zu ihren aktuellen Werten ab. Ein named tuple
ClosureVars(nonlocals, globals, builtins, unbound)wird zurückgegeben. nonlocals ordnet referenzierte Namen den lexikalischen Closure-Variablen zu, globals den Modul-Globals der Funktion und builtins den von der Funktionsrumpf sichtbaren Built-ins. unbound ist die Menge der im Funktion referenzierten Namen, die anhand der aktuellen Modul-Globals und Built-ins nicht aufgelöst werden konnten.TypeErrorwird ausgelöst, wenn func keine Python-Funktion oder -Methode ist.Hinzugefügt in Version 3.3.
- inspect.unwrap(func, *, stop=None)¶
Ruft das von func umschlossene Objekt ab. Es folgt der Kette von
__wrapped__-Attributen und gibt das letzte Objekt in der Kette zurück.stop ist eine optionale Callback-Funktion, die ein Objekt in der Wrapper-Kette als einziges Argument akzeptiert und es ermöglicht, das Entpacken frühzeitig zu beenden, wenn der Callback einen wahren Wert zurückgibt. Wenn der Callback niemals einen wahren Wert zurückgibt, wird wie üblich das letzte Objekt in der Kette zurückgegeben. Zum Beispiel verwendet
signature()dies, um das Entpacken zu stoppen, wenn ein Objekt in der Kette ein__signature__-Attribut definiert hat.ValueErrorwird ausgelöst, wenn ein Zyklus angetroffen wird.Hinzugefügt in Version 3.4.
- inspect.get_annotations(obj, *, globals=None, locals=None, eval_str=False, format=annotationlib.Format.VALUE)¶
Berechnet das Annotations-Dictionary für ein Objekt.
Dies ist ein Alias für
annotationlib.get_annotations(); siehe die Dokumentation dieser Funktion für weitere Informationen.Vorsicht
Diese Funktion kann beliebigen Code ausführen, der in Annotationen enthalten ist. Siehe Sicherheitsaspekte der Introspektion von Annotationen für weitere Informationen.
Hinzugefügt in Version 3.10.
Geändert in Version 3.14: Diese Funktion ist jetzt ein Alias für
annotationlib.get_annotations(). Der Aufruf alsinspect.get_annotationsfunktioniert weiterhin.
Der Interpreter-Stack¶
Einige der folgenden Funktionen geben FrameInfo-Objekte zurück. Aus Kompatibilitätsgründen erlauben diese Objekte Tupel-ähnliche Operationen auf allen Attributen außer positions. Dieses Verhalten gilt als veraltet und könnte in Zukunft entfernt werden.
- class inspect.FrameInfo¶
- frame¶
Das Frame-Objekt, dem der Datensatz entspricht.
- filename¶
Der Dateiname, der dem Code zugeordnet ist, der vom Frame ausgeführt wird, dem dieser Datensatz entspricht.
- lineno¶
Die Zeilennummer der aktuellen Zeile, die dem Code zugeordnet ist, der vom Frame ausgeführt wird, dem dieser Datensatz entspricht.
- function¶
Der Funktionsname, der vom Frame ausgeführt wird, dem dieser Datensatz entspricht.
- code_context¶
Eine Liste von Zeilen Kontext aus dem Quellcode, der vom Frame ausgeführt wird, dem dieser Datensatz entspricht.
- index¶
Der Index der aktuell ausgeführten Zeile in der Liste
code_context.
- positions¶
Ein
dis.Positions-Objekt, das die Startzeilennummer, Endzeilennummer, den Spaltenoffset am Anfang und den Spaltenoffset am Ende enthält, die der Anweisung zugeordnet sind, die vom Frame ausgeführt wird, dem dieser Datensatz entspricht.
Geändert in Version 3.5: Gibt ein named tuple anstelle eines
tuplezurück.Geändert in Version 3.11:
FrameInfoist nun eine Klasseninstanz (die abwärtskompatibel mit dem vorherigen named tuple ist).
- class inspect.Traceback¶
- filename¶
Der Dateiname, der dem Code zugeordnet ist, der vom Frame ausgeführt wird, dem dieser Traceback entspricht.
- lineno¶
Die Zeilennummer der aktuellen Zeile, die dem Code zugeordnet ist, der vom Frame ausgeführt wird, dem dieser Traceback entspricht.
- function¶
Der Funktionsname, der vom Frame ausgeführt wird, dem dieser Traceback entspricht.
- code_context¶
Eine Liste von Zeilen Kontext aus dem Quellcode, der vom Frame ausgeführt wird, dem dieser Traceback entspricht.
- index¶
Der Index der aktuell ausgeführten Zeile in der Liste
code_context.
- positions¶
Ein
dis.Positions-Objekt, das die Startzeilennummer, Endzeilennummer, den Spaltenoffset am Anfang und den Spaltenoffset am Ende enthält, die der Anweisung zugeordnet sind, die vom Frame ausgeführt wird, dem dieser Traceback entspricht.
Geändert in Version 3.11:
Tracebackist nun eine Klasseninstanz (die abwärtskompatibel mit dem vorherigen named tuple ist).
Hinweis
Das Aufrechterhalten von Referenzen auf Frame-Objekte, wie sie im ersten Element der von diesen Funktionen zurückgegebenen Frame-Datensätzen gefunden werden, kann dazu führen, dass Ihr Programm Referenzzyklen erzeugt. Sobald ein Referenzzyklus erstellt wurde, kann die Lebensdauer aller Objekte, auf die von den Objekten zugegriffen werden kann, die den Zyklus bilden, viel länger sein, auch wenn Pythons optionaler Zykluserkenner aktiviert ist. Wenn solche Zyklen erstellt werden müssen, ist es wichtig sicherzustellen, dass sie explizit gebrochen werden, um die verzögerte Zerstörung von Objekten und den erhöhten Speicherverbrauch zu vermeiden.
Obwohl der Zykluserkenner diese erkennen wird, kann die Zerstörung der Frames (und lokalen Variablen) durch das Brechen des Zyklus in einer finally-Klausel deterministisch gemacht werden. Dies ist auch wichtig, wenn der Zykluserkenner beim Kompilieren von Python deaktiviert wurde oder gc.disable() verwendet wurde. Zum Beispiel
def handle_stackframe_without_leak():
frame = inspect.currentframe()
try:
# do something with the frame
finally:
del frame
Wenn Sie den Frame behalten möchten (zum Beispiel um später einen Traceback zu drucken), können Sie Referenzzyklen auch brechen, indem Sie die Methode frame.clear() verwenden.
Das optionale Argument context, das von den meisten dieser Funktionen unterstützt wird, gibt die Anzahl der zurückzugebenden Kontextzeilen an, die um die aktuelle Zeile zentriert sind.
- inspect.getframeinfo(frame, context=1)¶
Ruft Informationen über ein Frame- oder Traceback-Objekt ab. Ein
Traceback-Objekt wird zurückgegeben.Geändert in Version 3.11: Ein
Traceback-Objekt wird anstelle eines named tuple zurückgegeben.
- inspect.getouterframes(frame, context=1)¶
Gibt eine Liste von
FrameInfo-Objekten für einen Frame und alle äußeren Frames zurück. Diese Frames repräsentieren die Aufrufe, die zur Erstellung von frame geführt haben. Der erste Eintrag in der zurückgegebenen Liste repräsentiert frame; der letzte Eintrag repräsentiert den äußersten Aufruf im Stack von frame.Geändert in Version 3.5: Eine Liste von named tuples
FrameInfo(frame, filename, lineno, function, code_context, index)wird zurückgegeben.Geändert in Version 3.11: Eine Liste von
FrameInfo-Objekten wird zurückgegeben.
- inspect.getinnerframes(traceback, context=1)¶
Gibt eine Liste von
FrameInfo-Objekten für den Frame eines Tracebacks und alle inneren Frames zurück. Diese Frames repräsentieren Aufrufe, die als Folge von frame getätigt wurden. Der erste Eintrag in der Liste repräsentiert traceback; der letzte Eintrag repräsentiert, wo die Ausnahme ausgelöst wurde.Geändert in Version 3.5: Eine Liste von named tuples
FrameInfo(frame, filename, lineno, function, code_context, index)wird zurückgegeben.Geändert in Version 3.11: Eine Liste von
FrameInfo-Objekten wird zurückgegeben.
- inspect.currentframe()¶
Gibt das Frame-Objekt für den Stack-Frame des Aufrufers zurück.
CPython-Implementierungsdetails: Diese Funktion ist auf die Unterstützung von Python-Stack-Frames im Interpreter angewiesen, die in allen Python-Implementierungen nicht garantiert ist. Wenn sie in einer Implementierung ohne Unterstützung für Python-Stack-Frames ausgeführt wird, gibt diese Funktion
Nonezurück.
- inspect.stack(context=1)¶
Gibt eine Liste von
FrameInfo-Objekten für den Stack des Aufrufers zurück. Der erste Eintrag in der zurückgegebenen Liste repräsentiert den Aufrufer; der letzte Eintrag repräsentiert den äußersten Aufruf im Stack.Geändert in Version 3.5: Eine Liste von named tuples
FrameInfo(frame, filename, lineno, function, code_context, index)wird zurückgegeben.Geändert in Version 3.11: Eine Liste von
FrameInfo-Objekten wird zurückgegeben.
- inspect.trace(context=1)¶
Gibt eine Liste von
FrameInfo-Objekten für den Stack zwischen dem aktuellen Frame und dem Frame zurück, in dem eine aktuell behandelte Ausnahme ausgelöst wurde. Der erste Eintrag in der Liste repräsentiert den Aufrufer; der letzte Eintrag repräsentiert, wo die Ausnahme ausgelöst wurde.Geändert in Version 3.5: Eine Liste von named tuples
FrameInfo(frame, filename, lineno, function, code_context, index)wird zurückgegeben.Geändert in Version 3.11: Eine Liste von
FrameInfo-Objekten wird zurückgegeben.
Attribute statisch abrufen¶
Sowohl getattr() als auch hasattr() können beim Abrufen oder Überprüfen der Existenz von Attributen Code ausführen. Deskriptoren, wie Eigenschaften, werden aufgerufen und __getattr__() und __getattribute__() können aufgerufen werden.
Für Fälle, in denen Sie passive Introspektion wünschen, wie z. B. für Dokumentationstools, kann dies unbequem sein. getattr_static() hat die gleiche Signatur wie getattr(), vermeidet aber die Ausführung von Code beim Abrufen von Attributen.
- inspect.getattr_static(obj, attr, default=None)¶
Ruft Attribute ab, ohne eine dynamische Suche über das Deskriptor-Protokoll,
__getattr__()oder__getattribute__()auszulösen.Hinweis: Diese Funktion kann möglicherweise nicht alle Attribute abrufen, die getattr abrufen kann (wie dynamisch erstellte Attribute) und kann Attribute finden, die getattr nicht finden kann (wie Deskriptoren, die AttributeError auslösen). Sie kann auch Deskriptorobjekte anstelle von Instanzmitgliedern zurückgeben.
Wenn die Instanz
__dict__durch ein anderes Mitglied (z. B. eine Eigenschaft) überschattet wird, kann diese Funktion keine Instanzmitglieder finden.Hinzugefügt in Version 3.2.
getattr_static() löst keine Deskriptoren auf, z. B. Slot-Deskriptoren oder Getset-Deskriptoren bei in C implementierten Objekten. Statt des zugrunde liegenden Attributs wird das Deskriptorobjekt zurückgegeben.
Sie können diese mit Code wie dem folgenden behandeln. Beachten Sie, dass die Ausführung von Code durch das Aufrufen beliebiger Getset-Deskriptoren ausgelöst werden kann
# example code for resolving the builtin descriptor types
class _foo:
__slots__ = ['foo']
slot_descriptor = type(_foo.foo)
getset_descriptor = type(type(open(__file__)).name)
wrapper_descriptor = type(str.__dict__['__add__'])
descriptor_types = (slot_descriptor, getset_descriptor, wrapper_descriptor)
result = getattr_static(some_object, 'foo')
if type(result) in descriptor_types:
try:
result = result.__get__()
except AttributeError:
# descriptors can raise AttributeError to
# indicate there is no underlying value
# in which case the descriptor itself will
# have to do
pass
Aktueller Status von Generatoren, Koroutinen und asynchronen Generatoren¶
Bei der Implementierung von Coroutine-Schedulern und für andere fortgeschrittene Verwendungen von Generatoren ist es nützlich festzustellen, ob ein Generator gerade ausgeführt wird, darauf wartet zu starten oder fortgesetzt zu werden, oder bereits beendet wurde. getgeneratorstate() ermöglicht es, den aktuellen Status eines Generators leicht zu ermitteln.
- inspect.getgeneratorstate(generator)¶
Aktuellen Status eines Generator-Iterators abrufen.
Mögliche Zustände sind
GEN_CREATED: Wartet auf den Start der Ausführung.
GEN_RUNNING: Wird gerade vom Interpreter ausgeführt.
GEN_SUSPENDED: Ist derzeit bei einem `yield`-Ausdruck angehalten.
GEN_CLOSED: Die Ausführung wurde abgeschlossen.
Hinzugefügt in Version 3.2.
- inspect.getcoroutinestate(coroutine)¶
Aktuellen Status eines Coroutine-Objekts abrufen. Die Funktion ist für die Verwendung mit Coroutine-Objekten vorgesehen, die von
async def-Funktionen erstellt wurden, akzeptiert aber jedes Coroutine-ähnliche Objekt, das die Attributecr_runningundcr_framehat.Mögliche Zustände sind
CORO_CREATED: Wartet auf den Start der Ausführung.
CORO_RUNNING: Wird gerade vom Interpreter ausgeführt.
CORO_SUSPENDED: Ist derzeit bei einem `await`-Ausdruck angehalten.
CORO_CLOSED: Die Ausführung wurde abgeschlossen.
Hinzugefügt in Version 3.5.
- inspect.getasyncgenstate(agen)¶
Aktuellen Status eines asynchronen Generator-Objekts abrufen. Die Funktion ist für die Verwendung mit asynchronen Iterator-Objekten vorgesehen, die von
async def-Funktionen erstellt wurden, die die `yield`-Anweisung verwenden, akzeptiert aber jedes asynchrone Generator-ähnliche Objekt, das die Attributeag_runningundag_framehat.Mögliche Zustände sind
AGEN_CREATED: Wartet auf den Start der Ausführung.
AGEN_RUNNING: Wird gerade vom Interpreter ausgeführt.
AGEN_SUSPENDED: Ist derzeit bei einem `yield`-Ausdruck angehalten.
AGEN_CLOSED: Die Ausführung wurde abgeschlossen.
Hinzugefügt in Version 3.12.
Der aktuelle interne Status des Generators kann ebenfalls abgefragt werden. Dies ist hauptsächlich zu Testzwecken nützlich, um sicherzustellen, dass der interne Status wie erwartet aktualisiert wird
- inspect.getgeneratorlocals(generator)¶
Die Zuordnung von aktiven lokalen Variablen in generator zu ihren aktuellen Werten abrufen. Ein Wörterbuch wird zurückgegeben, das Variablennamen auf Werte abbildet. Dies entspricht dem Aufruf von
locals()im Körper des Generators, und alle gleichen Vorbehalte gelten.Wenn generator ein Generator ohne aktuell zugeordneten Frame ist, wird ein leeres Wörterbuch zurückgegeben.
TypeErrorwird ausgelöst, wenn generator kein Python-Generatorobjekt ist.CPython Implementierungsdetail: Diese Funktion beruht darauf, dass der Generator einen Python-Stack-Frame zur Introspektion bereitstellt, was nicht in allen Python-Implementierungen garantiert ist. In solchen Fällen gibt diese Funktion immer ein leeres Wörterbuch zurück.
Hinzugefügt in Version 3.3.
- inspect.getcoroutinelocals(coroutine)¶
Diese Funktion ist analog zu
getgeneratorlocals(), funktioniert aber für Coroutine-Objekte, die vonasync def-Funktionen erstellt wurden.Hinzugefügt in Version 3.5.
- inspect.getasyncgenlocals(agen)¶
Diese Funktion ist analog zu
getgeneratorlocals(), funktioniert aber für asynchrone Generator-Objekte, die vonasync def-Funktionen erstellt wurden, die die `yield`-Anweisung verwenden.Hinzugefügt in Version 3.12.
Codeobjekt-Bitflags¶
Python-Codeobjekte haben ein Attribut co_flags, das eine Bitmap der folgenden Flags ist
- inspect.CO_OPTIMIZED¶
Das Codeobjekt ist optimiert und verwendet schnelle Locals.
- inspect.CO_NEWLOCALS¶
Wenn gesetzt, wird ein neues Wörterbuch für
f_localsdes Frames erstellt, wenn das Codeobjekt ausgeführt wird.
- inspect.CO_VARARGS¶
Das Codeobjekt hat einen variablen positionsbezogenen Parameter (ähnlich wie
*args).
- inspect.CO_VARKEYWORDS¶
Das Codeobjekt hat einen variablen Schlüsselwortparameter (ähnlich wie
**kwargs).
- inspect.CO_NESTED¶
Das Flag wird gesetzt, wenn das Codeobjekt eine verschachtelte Funktion ist.
- inspect.CO_GENERATOR¶
Das Flag wird gesetzt, wenn das Codeobjekt eine Generatorfunktion ist, d. h. ein Generatorobjekt wird zurückgegeben, wenn das Codeobjekt ausgeführt wird.
- inspect.CO_COROUTINE¶
Das Flag wird gesetzt, wenn das Codeobjekt eine Coroutine-Funktion ist. Wenn das Codeobjekt ausgeführt wird, gibt es ein Coroutine-Objekt zurück. Weitere Details finden Sie in PEP 492.
Hinzugefügt in Version 3.5.
- inspect.CO_ITERABLE_COROUTINE¶
Das Flag wird verwendet, um Generatoren in Generator-basierte Coroutinen umzuwandeln. Generatorobjekte mit diesem Flag können in `await`-Ausdrücken verwendet werden und `yield from` Coroutine-Objekten.
Hinzugefügt in Version 3.5.
- inspect.CO_ASYNC_GENERATOR¶
Das Flag wird gesetzt, wenn das Codeobjekt eine asynchrone Generatorfunktion ist. Wenn das Codeobjekt ausgeführt wird, gibt es ein asynchrones Generatorobjekt zurück. Weitere Details finden Sie in PEP 525.
Hinzugefügt in Version 3.6.
- inspect.CO_HAS_DOCSTRING¶
Das Flag wird gesetzt, wenn im Quellcode ein Docstring für das Codeobjekt vorhanden ist. Wenn gesetzt, ist es das erste Element in
co_consts.Hinzugefügt in Version 3.14.
- inspect.CO_METHOD¶
Das Flag wird gesetzt, wenn das Codeobjekt eine Funktion ist, die im Klassenbereich definiert ist.
Hinzugefügt in Version 3.14.
Hinweis
Die Flags sind spezifisch für CPython und werden möglicherweise nicht in anderen Python-Implementierungen definiert. Darüber hinaus sind die Flags ein Implementierungsdetail und können in zukünftigen Python-Versionen entfernt oder als veraltet markiert werden. Es wird empfohlen, für alle Introspektionsanforderungen öffentliche APIs aus dem inspect-Modul zu verwenden.
Buffer Flags¶
- class inspect.BufferFlags¶
Dies ist ein
enum.IntFlag, das die Flags darstellt, die an die Methode__buffer__()von Objekten übergeben werden können, die das Buffer-Protokoll implementieren.Die Bedeutung der Flags wird unter Buffer-Anforderungstypen erläutert.
- SIMPLE¶
- WRITABLE¶
- FORMAT¶
- ND¶
- STRIDES¶
- C_CONTIGUOUS¶
- F_CONTIGUOUS¶
- ANY_CONTIGUOUS¶
- INDIRECT¶
- CONTIG¶
- CONTIG_RO¶
- STRIDED¶
- STRIDED_RO¶
- RECORDS¶
- RECORDS_RO¶
- FULL¶
- FULL_RO¶
- READ¶
- WRITE¶
Hinzugefügt in Version 3.12.
Kommandozeilenschnittstelle¶
Das Modul inspect bietet auch grundlegende Introspektionsfähigkeiten von der Kommandozeile.
Standardmäßig wird der Name eines Moduls akzeptiert und der Quellcode dieses Moduls ausgegeben. Eine Klasse oder Funktion innerhalb des Moduls kann stattdessen ausgegeben werden, indem ein Doppelpunkt und der qualifizierte Name des Zielobjekts angehängt werden.
- --details¶
Gibt Informationen über das angegebene Objekt anstelle des Quellcodes aus