2015-07-10 184 views
6

在C中,如果我沒有錯,main函數在沒有錯誤發生時返回0,如果發生錯誤則返回0。錯誤處理方法

在Python中執行相同的操作是合適的(只要函數不必返回任何特定的值而只能指示成功/失敗);或者只是處理異常?

+1

對於命名功能'check_blub' /'is_blub'你應該返回'True'或'False'。通常也會看到名爲'validate_blub'的函數,它通常會引發ValueError。 – kay

+0

@cdarke感謝您的評論;但明白我沒有學過C. :-) –

回答

13

在Python中,您不應該使用返回值來指示錯誤。你應該使用例外。

所以,要麼讓這個例外發射氣泡,要麼拋出一個新的。

def check_foo(foo): 
    if foo == bar: 
     do_something(args) 

try: 
    check_foo(...) 
except SomeError: 
    # Oops! Failure! 
    something_went_wrong() 
else: 
    # Yay! Success! 
    everything_went_well() 

在某些情況下是有意義的有一個返回一個布爾函數,但是這不應該被用來指示錯誤

這通常用於在例行檢查,其中一些可以是真或假,並且既不是例外(即,既不是錯誤):

def is_foo(foo): 
    return foo == "foo" 
+0

因此,不是像某些語言那樣在函數中包含函數返回,而是執行所有代碼,然後處理錯誤。我有它嗎? –

+0

@ J.C.Rocamonde是的。有時候,如果發生錯誤,你只是沒有合理的事情去做,在這種情況下,你只是讓他們冒泡並完全終止口譯員。 –

3

不,你不應該。 Python有其他形式的錯誤處理,如果你真的想要返回一個成功的代碼,true和false是更好的方法。作爲一個調用者,你應該能夠假設一切都如預期的那樣,然後當出現問題時你可以拋出某種描述性錯誤。