Seite 1 von 1

try and except RuntimeWarning funktioniert nicht

Verfasst: Montag 14. Januar 2019, 21:48
von Krackerer
Hallo,

bei meinem program muss ich den np.mean() von vielen listen ziehen. Manchmal sind diese allerdings leer, sollte das dann nicht so funktionieren?:

Code: Alles auswählen

import warnings

with warnings.catch_warnings():
    warnings.filterwarnings('error')
try:
    print(np.mean([]))
except RuntimeWarning:
    print("no")
das mit dem warnings habe ich aus dem internet, hat aber auch nicht geholfen. folgende Fehlermeldung kommt:

Code: Alles auswählen

nan

C:\Users\User\Anaconda3\lib\site-packages\numpy\core\fromnumeric.py:2920: RuntimeWarning: Mean of empty slice.
  out=out, **kwargs)
C:\Users\User\Anaconda3\lib\site-packages\numpy\core\_methods.py:85: RuntimeWarning: invalid value encountered in double_scalars
  ret = ret.dtype.type(ret / rcount)
was ist hier falsch?

Re: try and except RuntimeWarning funktioniert nicht

Verfasst: Montag 14. Januar 2019, 21:53
von Sirius3
Dieses ganze catch_warnings kannst Du Dir sparen, genauso das try-except. Denn ersters hat nur Einfluß innerhalb des with-Blocks und np.mean wirft keine Exceptions, sondern gibt nur Warnungen aus, die man getrost ignorieren kann. Das Ergebnis von Leeren Listen ist NaN.

Re: try and except RuntimeWarning funktioniert nicht

Verfasst: Montag 14. Januar 2019, 23:10
von __blackjack__
Also bleibt ein `filterwarnings()` das so gestaltet ist, dass es nur die Warnung(en) erwischt, die man nicht sehen möchte.

Re: try and except RuntimeWarning funktioniert nicht

Verfasst: Mittwoch 16. Januar 2019, 14:02
von Krackerer
__blackjack__ hat geschrieben: Montag 14. Januar 2019, 23:10 Also bleibt ein `filterwarnings()` das so gestaltet ist, dass es nur die Warnung(en) erwischt, die man nicht sehen möchte.
Habe es hiermit geschafft die ungewollte Warnung zu unterdrücken:

Code: Alles auswählen

import warnings

with warnings.catch_warnings():
    warnings.filterwarnings('error')
    try:
        meanp = np.mean()
    except Warning as e:
        meanp = 0

vielen Dank für die Hilfe

Re: try and except RuntimeWarning funktioniert nicht

Verfasst: Mittwoch 16. Januar 2019, 14:46
von __blackjack__
@Krackerer: Wobei ich das mit der Ausnahme nicht machen würde, sondern testen würde ob das Ergebnis NaN ist und das gegebenfalls durch 0 ersetzen. Ooooder man testet ganz einfach vorher die Länge vom Argument von `np.mean()`. Das ist bloss eine Zeile und man kann sich das andere alles sparen:

Code: Alles auswählen

meanp = np.mean(something) if something else 0