3 回答

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊
的聲明else
如果執(zhí)行從try
-如果沒有例外的話。老實(shí)說,我從來沒有發(fā)現(xiàn)需要。
然而,處理異常注:
使用ASER子句比向try子句添加額外代碼更好,因?yàn)樗苊庖馔獠东@未被try保護(hù)的代碼引發(fā)的異常.除了陳述。
因此,如果您有一個(gè)方法,例如,可以拋出IOError
,您希望捕獲它引發(fā)的異常,但是如果第一個(gè)操作成功了,您還需要做一些其他的事情,而您別要從該操作中捕獲ioError,可以編寫如下內(nèi)容:
try: ????operation_that_can_throw_ioerror()except?IOError: ????handle_the_exception_somehow()else: ????#?we?don't?want?to?catch?the?IOError?if?it's?raised ????another_operation_that_can_throw_ioerror()finally: ????something_we_always_need_to_do()
如果你把another_operation_that_can_throw_ioerror()
后operation_that_can_throw_ioerror
,except
會發(fā)現(xiàn)第二個(gè)電話的錯(cuò)誤。如果你把它放在try
塊,它將始終運(yùn)行,直到finally
..這個(gè)else
讓你確保
- 第二個(gè)操作只有在沒有例外的情況下才能運(yùn)行,
- 它會在
布洛克finally
- 任何
它不會在這里被抓到IOError

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個(gè)贊
有一個(gè)大的使用理由else
-風(fēng)格和可讀性。通常,將可能導(dǎo)致異常的代碼保存在處理它們的代碼附近是一個(gè)好主意。例如,比較以下幾個(gè)方面:
try: ????from?EasyDialogs?import?AskPassword ????#?20?other?lines ????getpass?=?AskPasswordexcept?ImportError: ????getpass?=?default_getpass
和
try: ????from?EasyDialogs?import?AskPasswordexcept?ImportError: ????getpass?=?default_getpasselse: ????#?20?other?lines ????getpass?=?AskPassword
第二個(gè)是好的,當(dāng)except
不能提前返回,或者重新拋出異常。如果可能的話,我會寫:
try: ????from?EasyDialogs?import?AskPasswordexcept?ImportError: ????getpass?=?default_getpass????return?False??#?or?throw?Exception('something?more?descriptive')#?20?other?linesgetpass?=?AskPassword
添加回答
舉報(bào)