about_triangle_prject2的代碼沒有什麼特別:python
def test_illegal_triangles_throw_exceptions(self): with self.assertRaises(TriangleError): triangle(0, 0, 0)
這是一個with context manager,assertRaises如今在python3裏面已經支持使用with了,因此運行順序應該是創建assertRaises>運行triangle(0,0,0)>assertRaises __exit__的對應。不過這一題主要須要書寫的部分不在這裏,而是triangle.pyruby
def triangle(a, b, c): side_arr = sorted([a,b,c]) if side_arr[0]<=0 or side_arr[2]>= side_arr[0]+side_arr[1]: raise TriangleError else: subEdge = set([a,b,c]) if len(subEdge) == 1: return 'equilateral' elif len(subEdge) == 2: return 'isosceles' else: return 'scalene' # Error class used in part 2. No need to change this code. class TriangleError(Exception): pass
這裏面關鍵的內容是下面:koa
side_arr = sorted([a,b,c]) if side_arr[0]<=0 or side_arr[2]>= side_arr[0]+side_arr[1]: raise TriangleError else:
簡單說就是兩個條件,首先不能有任何一個邊長度小於等於0(選取三個邊裏面最小的),而後最長邊應該短於另外兩邊的和,若是上面的條件不能達到,那麼就raise一個自建的error Class:TriangleErroride
固然TriangleError只是一個空的類,可是不要緊,這道題這樣就已通過了。ui
之因此寫這個,主要是以前在這裏堵了好久,最近在stackoverflow看到了ruby koans裏面關於這道題的討論才弄明白該怎麼寫。stackoverflow的相關連接在下面:this
http://stackoverflow.com/questions/3834203/ruby-koan-151-raising-exceptionscode