Werzi2001 hat geschrieben:
Hi@ll
ich habe ein Array in dem ich "Funktionszeiger" speichere. Diese Funktionen rufe ich dann (einzeln) auf und sichere deren Rückgabewert in einer Variable. Wenn der Rückgabewert vom Typ String ist und er nur Zahlen enthält caste ich ihn in einen int-Typ. Der Code sieht so aus:
value = _FUNCTIONS[funcname](parameters)
if isinstance(value, str):
if value.isdigit():
value = int(value)
IMHO gibt es an dem Code nichts auszusetzen und er funktioniert auch einwandfrei. Allerdings bringt pylint folgenden Fehler:
Instance of 'int' has no 'isdigit' member
Ist das ein false positive oder mache ich wirklich etwas falsch?
Bei Python stellt sich das Problem, dass aufgrund der dynamischen Typisierung nicht immer genau Typinformationen ermittelt werden können, speziell dann, wenn man Funktionen dynamisch ermittelt und nicht über ihren eigentlichen Namen aufruft. Zudem sollte die Typüberprüfung in der if Abfrage verhindern, dass isdigit für Integer-Werte aufgerufen wird. Ich denke, in diesem Fall kannst du von einem False Positive ausgehen. Wobei man vielleicht hinzufügen sollte, dass du eventuell dein Design überdenken könntest. Wenn pylint nicht in der Lage ist, den Typ korrekt zu bestimmen, dann bist du es vielleicht später auch nicht mehr. Das könnte zu Fehlern führen...
Btw, lieber ein "if isinstance(value, basestring)". Damit schließt du unicode Strings mit ein...