2015-09-16 67 views
0

我對Python 2.7中的try異常使用有點困惑。Python 2.7異常處理語法

try: 
    raise valueError("sample value error") 
except Exception as e: 
    print str(e)  

try: 
    raise valueError("sample value error") 
except Exception,exception: 
    print str(exception) 


try: 
    raise valueError("sample value error") 
except exception: 
    print str(exception) 


try: 
    raise valueError("sample value error") 
except Exception: 
    print str(Exception) # it prints only the object reference 

可以幫我理解一下上面的用法嗎?

+0

如果您想要捕捉異常並對其執行操作,請使用第一個示例。最後一個例子是,當你實際上並不關心捕獲錯誤時,你只是想知道什麼時候拋出異常。最後一個例子更像是控制流程。第一個例子是關於查看某個呼叫失敗的原因。 –

+0

請關注你的問題。你似乎要求輔導比StackOverflow的目的更廣泛。 您應該執行這些示例中的每一個,檢查輸出,並將其與教科書和在線材料中的描述進行比較。如果您仍然不明白具體結果,請發佈示例,輸出結果以及您困惑的描述。 作爲開始,請注意「Exception」是一個非常基本的類,作爲Python語言的一部分提供; 「異常」是一個全局變量。 – Prune

回答

0

使用格式

try: 
    raise ValueError("sample value error") 
except Exception, e: 
    print e 
0

我用:

try: 
    raise valueError("sample value error") 
except Exception as e: 
    print str(e) 

當我要聲明一個特定的錯誤和

try: 
    raise valueError("sample value error") 
except: 
    print "Something unexpected happened" 

當我真的不關心或except: passexcept: return etc

2

個一些概念,以幫助您瞭解except變種的替代變體之間的區別:

  • except Exception, e - 在一箇舊變種這個,現在已經過時,類似except Exception as e
  • except Exception as e - 類型Exception的捕獲例外(或任何子類)並將它們存儲在變量e中以進行進一步處理,消息傳遞或類似處理
  • except Exception - 捕獲類型爲Exception(或任何子類)的異常,但忽略提供的值/信息n異常
  • except e - 給我一個編譯錯誤,不知道這是否與python版本有關,但如果是這樣,它應該/意味着你不關心異常的類型,但想訪問的信息在它
  • except - 捕捉任何異常,而忽視了異常信息

幹什麼用的,取決於很多因素,但如果你不需要在異常所提供的信息不存在需要出示變量來捕獲這些信息。

關於要捕獲哪種類型的Exception,請注意捕獲準確的異常類型。如果你正在編寫一個通用的方法,那麼使用except Exception是正確的,但是在例子中你已經給出了我會直接選擇實際使用except ValueError。這將允許在其他級別的代碼中正確處理潛在的其他異常。關鍵是,不要忽視你不準備處理的例外情況。

如果需要,您可以在官方文檔中閱讀python 2.7 exception handlingavailable python 2.7 exception的更多信息。

+0

謝謝@holroy,給我一個清晰的畫面 – tamil