顯示廣告
隱藏 ✕
※ 本文為 nakts0123.bbs. 轉寄自 ptt.cc 更新時間: 2013-05-05 19:11:28
看板 Python
作者 uranusjr (←這人是超級笨蛋)
標題 Re: [翻譯] Google 建議的 Python 風格指南 4
時間 Sun Apr 28 00:18:59 2013



注釋一下


※ 引述《sandwichC (沒回應=掛站)》之銘言:
: 原文網址:http://google-styleguide.googlecode.com/svn/trunk/pyguide.html
: 的 exception。因此,應儘可能避免使用 catch-all except。少數可以使用
: catch-all except 的情形有: re-raising exception (編案:re-raise 是一種
: python 常用的手法用來重現剛拋出的異常)、或者你已經在最外層的程式中而想要
: 補捉所有你沒考慮到的 exception 以印出錯誤的細節。

Re-raising

    try:
        something()
    except:
        print 'Something bad just happened.'
        raise

這邊的 raise 就是所謂的 re-raise
代表的意思是「我剛剛抓到的 exception 不管它是什麼麻煩照樣繼續丟出去」

上面程式碼的意義與下面的版本基本相同:

    try:
        something()
    except Exception as e:
        print 'Something bad just happened.'
        raise e

不過方便很多


: 讓 try/except 區塊中的程式碼儘量少。try 區塊中的程式碼愈長,其中愈有可能
: 出現意料之外的錯誤,這些意外的錯誤可能因為 except 區塊而被隱藏。
: 用 finally 來處理無論意外發生與否都應該要執行的程式片段。這常被用來清理資
: 源,如:關閉檔案。

這裡有一個沒有提到的東西, 可以用來改善 try/except 造成的流程問題
Python 的 try/except block 還有一個額外的元件 else

    try:
        do_something()
    except:
        do_this_if_something_failed()
    else:
        do_this_if_something_succeeded_but_dont_catch_exceptions_in_this()
    finally:
        always_do_this()

善用 else 會讓你省去很多很可怕的嵌套 try-blocks
如果你一嵌下去程式就會變成火星流程了

一旦你感覺自己需要在 try 裡面(或外面)又加一個 try
請思考有沒有可能改用 else


--
                 ╱ ̄ ̄ ̄╲
                 ▏◢█◣  
                   ▏        成龍表示: 是喔...
                 ′/ ‵    ▏
                  ╰╯
ψQSWEET         █◤

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.81.146
timTan:多謝提醒阿~~1F 04/29 18:33

--
※ 看板: Gabinius 文章推薦值: 0 目前人氣: 0 累積人氣: 39 
分享網址: 複製 已複製
guest
x)推文 r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇