2016-11-01 1 views
0

Wie behandelt man am besten einen Fall, in dem eine Funktion None zurückgibt? Zum Beispiel:Die richtige Methode zur Behandlung der Ausnahme bei Rückgabe der Funktion Keine

def my_function(): 
    if <some_stuff_works>: 
     return <stuff> 
    else: 
     return None 

my_var = my_function() 

Was Ich mag würde tun, ist eine Ausnahme auslösen, wenn my_var Keiner ist und dann auf einen bestimmten Wert festgelegt. So etwas wie:

try: 
    my_var = my_function() 
except ValueIsEmpty: 
    my_var = "EMPTY" 

Macht das Sinn?

+1

Warum statt Keine not return "LEER"? – CAB

Antwort

3

Wenn Sie die Funktion nicht ändern können, müssen Sie keine Creative-Ausnahme erstellen: Überprüfen Sie, ob es sich um None handelt, und geben Sie einen geeigneten Wert an.

my_var = my_function() 
if my_var is None: 
    my_var = 'default_value' 
1

Da Sie Ausnahmen verwenden möchten, versuchen Sie dies;

def my_function(): 
    if <some_stuff_works>: 
     return <stuff> 
    raise ValueError 

try: 
    my_var = my_function() 
except ValueError: 
    my_var = "EMPTY" 
0

Sie können dies tun:

var = my_function() or 'default_value' 

Aber var wird zu 'default_value' gleich sein, wenn my_function kehrt

  • None (was Sie wollen)
  • False
  • 0
  • leere Liste [] (dank @roganjosh)

Bis zu Ihnen zu entscheiden, was Sie wollen. Wenn du das nicht tust, ist @ brianpcks Antwort immer noch die beste.

Sie veranlassen auch, dass die Funktion eine Ausnahme auslöst, anstatt None zurückzugeben.

def my_function(): 
    if <some_stuff_works>: 
     return <stuff> 
    else: 
     raise SomeException # maybe TypeError, whatever 

Und dann es so nennen:

try: 
    result = my_function() 
except SomeException: 
    result = 'EMPTY' 

Oder noch besser:

def my_function(): 
    if <some_stuff_works>: 
     return <stuff> 
    # no need for the else because return end up the function execution. 
    # so if it returns <stuff>, it will stop, and not look further 
    return 'EMPTY' 
+0

Auch leere Listen usw. geben 'default_value' zurück, da sie auch falsch sind. – roganjosh

Verwandte Themen