2011-09-13 20 views
2

最近、Python Koanを使ってPythonを学習しています。Pythonで例外を発生させる問題を思いつきました。具体的には、私はtry...except...と混乱しています。ルーディーコーンRuby Koan 151 raising exceptionsについても同様の疑問があることを知っています。しかし、私はPython初心者であり、Rubyについては何も知らない。Python Koan 131例外を発生する

だからここ公案さ:

# You need to finish implementing triangle() in the file 'triangle.py' 
from triangle import * 

class AboutTriangleProject2(Koan): 
    # The first assignment did not talk about how to handle errors. 
    # Let's handle that part now. 
    def test_illegal_triangles_throw_exceptions(self): 
     # Calls triangle(0, 0, 0) 
     self.assertRaises(TriangleError, triangle, 0, 0, 0) 

     self.assertRaises(TriangleError, triangle, 3, 4, -5) 
     self.assertRaises(TriangleError, triangle, 1, 1, 3) 
     self.assertRaises(TriangleError, triangle, 2, 4, 2) 

次は私がtriangle()機能を終了することになっていますtriangle.py

def triangle(a, b, c): 
    # DELETE 'PASS' AND WRITE THIS CODE 

    if a == b and b == c and c == a: 
     return 'equilateral' 
    if a == b or b == c or a == c: 
     return 'isosceles' 
    else: 
     return 'scalene' 

# Error class used in part 2. No need to change this code. 
class TriangleError(StandardError): 
    pass 

です。

try...except...は、特定の基準が満たされていれば何かを行い、それ以外の場合は例外のように機能します。私の状況では、if ... then raise TriangleErrorまたはtry... except ...を使用する必要がありますか?彼らの違いは何ですか?

ありがとうございました!

答えて

1

raiseを使用すると、例外が作成され、try/exceptブロックで例外を処理するまで呼び出しスタックを移動します。あなたが実際のコードでは、この三角関数を使用している場合たとえば、あなたが悪いの三角形が行われたと、あなたのプログラムがクラッシュしないだろうというときにエラーを処理することができるだろう方法

try: 
    t = triangle(x, y, z) 
    ... 
except TriangleError: 
    print 'Triangle', x, y, z, 'is no good!' 

ような何かをするだろう。

4

次の答えをご覧ください。ここ

def triangle(a, b, c): 
    # DELETE 'PASS' AND WRITE THIS CODE 
    if min([a,b,c])<=0: 
     raise TriangleError 
    x,y,z = sorted([a,b,c]) 
    if x+y<=z: 
     raise TriangleError 
    if a==b and b==c and c==a: 
     return 'equilateral' 
    if a==b or b==c or a==c: 
     return 'isosceles' 
    else: 
     return 'scalene'  
1

が私のコードで、それは私が、ナンシーの答えに似たものになってしまっ使用して設定するのではなく、Bを比較すると

def triangle(a, b, c): 
# DELETE 'PASS' AND WRITE THIS CODE 
if min([a,b,c])<=0: 
    raise TriangleError,"no <0 numbers" 

if sorted([a,b,c])[0]+sorted([a,b,c])[1]<=sorted([a,b,c])[2]: 
    raise TriangleError,"sf" 

set_a=set(([a,b,c])) 
if len(set_a)==1: 
    return 'equilateral' 
elif len(set_a)==2: 
    return 'isosceles' 
elif len(set_a)==3: 
    return 'scalene' 

# Error class used in part 2. No need to change this code. 
class TriangleError(StandardError): 
    pass 
0

を働きましたc手動で、それも働いた。

def triangle(a, b, c): 
    # DELETE 'PASS' AND WRITE THIS CODE 
    ls = sorted([a,b,c]) 
    if min(ls)<=0 or ls[0]+ls[1]<=ls[2]: raise TriangleError, 'Triángulo mal formado.' 
    l = len(list(set(ls))) 
    if(l==1): return 'equilateral' 
    if(l==2): return 'isosceles' 
    if(l==3): return 'scalene' 

# Error class used in part 2. No need to change this code. 
class TriangleError(StandardError): 
    pass