try and except RuntimeWarning funktioniert nicht

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Krackerer
User
Beiträge: 5
Registriert: Freitag 4. Januar 2019, 18:49

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?
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Benutzeravatar
__blackjack__
User
Beiträge: 13068
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Also bleibt ein `filterwarnings()` das so gestaltet ist, dass es nur die Warnung(en) erwischt, die man nicht sehen möchte.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Krackerer
User
Beiträge: 5
Registriert: Freitag 4. Januar 2019, 18:49

__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
Benutzeravatar
__blackjack__
User
Beiträge: 13068
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten