2012-10-22 26 views
4

在python中,通常會定義用戶定義的異常,以便在用戶定義的類中發生錯誤時,它們可以返回某些用戶定義的測試/輸出/任何內容。但是我想知道,如果有一種很好的方法來處理python中給定類的異常?具體而言,我有以下問題:如何從概念上處理python中的異常?

  1. 如果所有的類相關的異常進入定義Python類的文件,或者他們應該進入一個特定的文件?

  2. 如果對任何可能出現異常情況的可能情況定義異常,或者只爲一個類定義一般異常並以錯誤的方式打印出發生的地點和事件的詳細信息通過提供一些額外的文字?

  3. 如果有人可以發表一個用戶定義的異常應該是什麼樣子的例子,那麼看看爲什麼定義自己特定的異常類是一件好事的原因,我將不勝感激。

感謝 亞歷克斯

+0

我想看看默認的Python是如何做到這一點。它有一個類層次結構,所有輸入/輸出相關的錯誤都使用相同的異常類。我在其他例子上畫了一個空白,爲什麼這是一個評論。我試圖只在有意義的情況下編寫特定的異常類,否則不需要屏蔽python默認提供的乾淨異常。此外,我通常在與使用它們相同的類文件中定義這些特定的例外。 – sean

回答

0
  1. Python程序的文件級組織是不是特別有趣,當你在做保養時除外。模塊級組織更重要,因爲它決定了API(至少在import時間),因此請確保您的例外位於使用它們的模塊中。

    一個常見的設置是從該軟件包的根目錄中導出軟件包的所有例外,因此可以說from foo import Foo, FooError, BarError。模塊系統可以隱藏定義是否存在於同一個文件中。

  2. 完全取決於您希望如何細緻地捕捉異常。不過,通常情況下,我發現內置的例外(ValueErrorTypeError等)足夠精細。對於您的軟件包中可能出錯的特定事情,您可能會添加一個或多個例外。

  3. 如何是關於......

    class ParseError(Exception): 
        def __init__(self, parser_input, line, column): 
         self.input = parse_input 
         self.line = line 
         self.column = column 
    
        def __str__(self): 
         # format the exception message, showing the offending part of 
         # self.input and what the parser was expecting.