2013-04-24 15 views
1

我最近聽到的使用語句使用try和除蟒

try: 

except WhateverError: 

我只是想知道,如果它是一個很好的處理在Python異常的可能性在定義下一堂課時使用它的想法。 它應該代表一個地形。矩陣的每個數字表示它的座標,數字是該座標的高度。

class base_terreny(object): 
    # create default mxn terrain # 

    def __init__(self, rows, columns): 
     self.rows=rows 
     self.columns=columns 
     self.terrain=[[0]*columns for _ in range(rows)] 


    def __getitem__(self, pos): #return height of coordinate 
     try: 
      return self.terrain[pos[1]][pos[0]] 
     except (IndexError,TypeError): 
      return 0 


    def __setitem__(self, pos, h): #set height 
     try: 
      self.terrain[pos[1]][pos[0]]=h 
     except (IndexError,TypeError): 
      return None 

或者它會更好地做到這一點,如:

if pos[0]<=self.columns and pos[1]<=self.rows:  
    self.terrain[pos[1]][pos[0]]=h 
+2

請參見[Python寬恕與權限和鴨子鍵入](http://programmers.stackexchange.com/q/175655) – 2013-04-24 20:29:45

+0

您的語法不正確;要捕獲多個異常,請將它們指定爲一個元組:'except(IndexError,TypeError):'。 – 2013-04-24 20:30:12

+1

在這種情況下,請使用異常處理程序;走出界限將是例外。 – 2013-04-24 20:31:59

回答

3

兩種方式都是可以接受的,但它可能是更清潔使用第二個。雖然異常通常是有用的,但您實際嘗試使用異常進行測試的是第二種技術。雖然在這種情況下它並不重要,但通常認爲使用if語句更好,除非您實際嘗試以不同方式處理錯誤。在另一種情況下,除了你可能會測試的東西之外,還有其他的東西可能會引發錯誤。