Wie bekomme ich die Signaturparameter einer Callable oder vergewissere ich mich, dass dies nicht möglich ist?

8

Das eingebaute int benötigt zwei Parameter:

%Vor%

Allerdings (in CPython 3.4.0) zeigt inspect.signature 0:

%Vor%

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"?

    
Laurence Gonsalves 06.04.2015, 18:41
quelle

1 Antwort

1

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%     
1.618 17.04.2015, 21:26
quelle

Tags und Links