Wie kann ich in Python nach NaN suchen?


Answers

Der übliche Weg, um nach einem NaN zu suchen, ist zu sehen, ob es sich selbst gleicht:

def isNaN(num):
    return num != num
Question

float('nan') ergibt Nan (keine Zahl). Aber wie überprüfe ich es? Sollte sehr einfach sein, aber ich kann es nicht finden.




Nun, ich habe diesen Beitrag eingegeben, weil ich einige Probleme mit der Funktion hatte:

math.isnan()

Es gibt ein Problem, wenn Sie diesen Code ausführen:

a = "hello"
math.isnan(a)

Es gibt eine Ausnahme. Meine Lösung dafür ist, noch einmal nachzusehen:

def is_nan(x):
    return isinstance(x, float) and math.isnan(x)



Ich empfange die Daten von einem Web-Service, der NaN als String 'Nan' sendet. Es könnte aber auch andere Arten von Strings in meinen Daten geben, so dass ein einfacher float(value) eine Ausnahme auslösen könnte. Ich habe die folgende Variante der akzeptierten Antwort verwendet:

def isnan(value):
  try:
      import math
      return math.isnan(float(value))
  except:
      return False

Anforderung:

isnan('hello') == False
isnan('NaN') == True
isnan(100) == False
isnan(float('nan')) = True



Ich bin gerade reingerannt, aber für mich war es die Suche nach Nan, -inf oder inf. Ich habe es gerade benutzt

if float('-inf') < float(num) < float('inf'):

Dies gilt für Zahlen, false für nan und beide inf, und wird eine Ausnahme für Dinge wie Strings oder andere Arten auslösen (was wahrscheinlich eine gute Sache ist). Außerdem müssen Sie keine Bibliotheken wie math oder numpy importieren (numpy ist so verdammt groß und verdoppelt die Größe jeder kompilierten Anwendung).




Eine andere Methode, wenn Sie auf <2.6 stecken, Sie haben keine Nummern und Sie haben keine IEEE 754-Unterstützung:

def isNaN(x):
    return str(x) == str(1e400*0)