2017-05-23 1 views
0

in meinem Skript Ich bekomme 2 Variablen Val1 und Val2 aus 2 verschiedenen Datenbanken und ich muss sie vergleichen.Vergleich von Variablen mit verschiedenen Typen in Python

Das Problem ist, dass, wenn der Typ der Variablen unterschiedlich ist, die Variablen die gleiche Bedeutung in der Datenbank darstellen können.

So ‚‘ (leerer String oder String enthält nur Leerzeichen) bedeutet dasselbe wie 0 oder 0 oder Keine

Muss ich alle möglichen Kombinationen der Variablentypen überprüfen? Und wie muss ich es tun, um sicher zu sein, dass ich keinen Typ vermisse?

def CompareValues(Val1,Val2,Debug=False): 

    if Val1 is None and Val2 is float: 
     if Debug:print('none-float') 
     if Val2 == 0.  : return True 
    if Val1 is None and Val2 is int: 
     if Debug:print('none-int') 
     if Val2 == 0   : return True 
    if Val1 is None and Val2 is str: 
     if Debug:print('none-str') 
     if Val2.strip() == '': return True 
    [...] 
    return False 

Gibt es einen mehr pythonischen Weg dafür?

+1

'wenn nicht Val1 und nicht Val2:' prüft, ob beide Werte eine von allen falsy Typen sind, ist das, was Sie wollen? –

Antwort

0

Sie können

if not Val1: 
    #True for [],{},'',0,0.0,False,None, etc.. 

Für Typprüfung tun, sollten Sie tun isinstance

In [10]: isinstance(0.0, float) 
Out[10]: True 

In [11]: isinstance("mystring", str) 
Out[11]: True 
0

Schreiben Sie eine Funktion, die Sie ''' ''0' und 0 und gibt Null zurück, mit anderen Worten zwingen die Daten akzeptiert werden zu einem gemeinsamen Datentyp.

Dann vergleichen Sie die Funktion Ergebnisse.

Zum Beispiel

def coerce(n): 
    if type(n) is str: 
     n = n.strip() 
    if not n: 
     return 0 
    if type(n) is str and n.isdigit(): 
     return int(n.strip()) 
    return n 

>>> coerce("") 
0 
>>> coerce(" ") 
0 
>>> coerce("0") 
0 
>>> coerce("4") 
4 
>>> coerce("") == coerce(0) 
True 
Verwandte Themen