Das eingebaute int
benötigt zwei Parameter:
Allerdings (in CPython 3.4.0) zeigt inspect.signature
0:
im Gegensatz zu einer benutzerdefinierten Funktion:
%Vor% In den Dokumenten für inspect.signature
heißt es:
Einige Callables sind in bestimmten Implementierungen von Python möglicherweise nicht introspektabel. In CPython beispielsweise enthalten einige in C definierte integrierte Funktionen keine Metadaten zu ihren Argumenten.
Aber sie sagen auch:
Löst ValueError aus, wenn keine Signatur bereitgestellt werden kann, und TypeError, wenn dieser Objekttyp nicht unterstützt wird.
Ich bin überrascht, dass ich nicht ValueError
bekommen habe und stattdessen eine falsche Signatur bekommen habe.
Gibt es eine Möglichkeit, zuverlässig (und programmatisch) zu bestimmen, wann es nicht möglich ist, die Parameter für eine aufrufbare Funktion mit inspect
zu erhalten? Das heißt, wenn ich etwas wie int
gegeben habe, gibt es eine Möglichkeit zu unterscheiden zwischen "dieses Ding hat keine Parameter" und "es ist nicht möglich zu bestimmen, welche Parameter dieses Ding hat"?
Es gibt einen offenen Fehlerbericht dafür: Ссылка
Das Problem ist, dass, wenn das an signature()
übergebene obj ein 'type' ist und es kein benutzerdefiniertes init oder neues hat gibt auf und gibt die Signatur für object
zurück, die 0 Parameter hat.
Wenn sich das Obj im Modul "builtins" befindet und es ein "Typ" ist, aber keine Ausnahme, besteht eine ziemlich gute Chance, dass es nicht mit signature()
funktioniert.
Ich habe diese Problemumgehung gefunden, um das Problem objs zu finden ... Es ist nicht besonders elegant, aber es könnte für Sie nützlich sein:
%Vor%Ausgabe:
%Vor%Tags und Links python python-3.x