2016-11-01 61 views
0

處理函數返回None的情況的最佳方法是什麼?例如:函數返回時處理異常的正確方法無

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

my_var = my_function() 

我想要做的是引發一個異常,如果my_var是無,然後設置爲一定的值。所以像這樣:

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

這有道理嗎?

+1

爲什麼不返回,而不是無 「空」? – CAB

回答

3

如果您無法修改該功能,則無需提出創意例外情況:只需檢查它是否爲None併爲其指定適當的值即可。

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

既然你想使用例外,試試這個;

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

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

你可以這樣做:

var = my_function() or 'default_value' 

但是,var將等於 'DEFAULT_VALUE' 當my_function返回

  • None(你想要的)
  • False
  • 0
  • 空單[](感謝@roganjosh)

由你來選擇你想要的東西。如果你不這樣做,@ brianpck的答案仍然是最好的答案。

您還可以使該功能引發異常,而不是返回None

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

然後調用它像這樣:

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

甚至更​​好:

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

空列表等會返回'default_value',因爲它們也是錯誤的。 – roganjosh