2013-10-27 49 views
0

我是新來的蟒蛇,我需要一些幫助。使用錯誤消息作爲語句

我有一個python腳本來找到圓心的X座標。如果r1很小,則xA1和xA2是複數(表示錯誤消息:ValueError:數學域錯誤)。我的問題是,如何使用此錯誤消息爲一個while語句?我必須複製while語句下面的整個代碼嗎?是否可以鏈接到第一個方程xs2 = r3 * math.sin(beta2r)?

謝謝你的回答。

羅馬

import math 

r1=0; 
r2=110.5;    
r3=212.5;    
beta2d=35;    
beta1dpoz=45;   

beta2r=beta2d*math.pi/180 

xs2=r3*math.sin(beta2r)  
ys2=r1-r3*math.cos(beta2r) 

kruh1=math.pow(xs2,2)+math.pow(ys2,2)       
kruh2=math.pow(r1,2)+math.pow(r3,2)-2*r1*r3*math.cos(beta2r) 

xA1=1.0/2*((xs2*(1+((math.pow(r1,2)-math.pow(r2,2))/(math.pow(xs2,2)+math.pow(ys2,2)))))+(ys2*(math.sqrt(((2*(math.pow(r1,2)+math.pow(r2,2)))/(math.pow(xs2,2)+math.pow(ys2,2)))-(math.pow(((math.pow(r1,2)-math.pow(r2,2))/(math.pow(xs2,2)+math.pow(ys2,2))),2))-1)))) 
xA2=1.0/2*((xs2*(1+((math.pow(r1,2)-math.pow(r2,2))/(math.pow(xs2,2)+math.pow(ys2,2)))))-(ys2*(math.sqrt(((2*(math.pow(r1,2)+math.pow(r2,2)))/(math.pow(xs2,2)+math.pow(ys2,2)))-(math.pow(((math.pow(r1,2)-math.pow(r2,2))/(math.pow(xs2,2)+math.pow(ys2,2))),2))-1)))) 

    xAmat=[xA1,xA2] 

    xA=max(xAmat) 

    while ('ValueError: math domain error'): 
     r1=r1+0.1 
. 
. 
. 
xA= 
+2

你想在這裏做什麼?就像這樣,while循環將永遠循環,因爲condition是一個非空字符串,總是計算爲「True」。 – rlms

+1

噢,我的天啊,你會看看這兩條線有多長。 –

+0

只要計算結果產生一個值,您是否希望它停止,而不是錯誤? – wwii

回答

1

這將增加r1直到XA1和XA2是有效的。

import math 

r1=0; 
r2=110.5;    #vstupny polomer 
r3=212.5;    #vystupny polomer 
beta2d=35;    #vystupny uhel 
beta1dpoz=45;   #vstupny uhel 

xA1, xA2 = None, None 
#Keep looping till xA1 and xA2 are valid 
while xA1 == None and xA2 == None: 

    beta2r=beta2d*math.pi/180 

    xs2=r3*math.sin(beta2r)  
    ys2=r1-r3*math.cos(beta2r) 

    kruh1=math.pow(xs2,2)+math.pow(ys2,2)       
    kruh2=math.pow(r1,2)+math.pow(r3,2)-2*r1*r3*math.cos(beta2r) 

    try: 
     xA1=1.0/2*((xs2*(1+((math.pow(r1,2)-math.pow(r2,2))/(math.pow(xs2,2)+math.pow(ys2,2)))))+(ys2*(math.sqrt(((2*(math.pow(r1,2)+math.pow(r2,2)))/(math.pow(xs2,2)+math.pow(ys2,2)))-(math.pow(((math.pow(r1,2)-math.pow(r2,2))/(math.pow(xs2,2)+math.pow(ys2,2))),2))-1)))) 
     xA2=1.0/2*((xs2*(1+((math.pow(r1,2)-math.pow(r2,2))/(math.pow(xs2,2)+math.pow(ys2,2)))))-(ys2*(math.sqrt(((2*(math.pow(r1,2)+math.pow(r2,2)))/(math.pow(xs2,2)+math.pow(ys2,2)))-(math.pow(((math.pow(r1,2)-math.pow(r2,2))/(math.pow(xs2,2)+math.pow(ys2,2))),2))-1)))) 
    except ValueError: 
     r1 += 0.1 

xAmat=[xA1,xA2] 
xA=max(xAmat) 

如果有可能對任何其它計算(beta2r, ys2, xs2, kruh1, kruh1),以產生一個ValueError然後移動try語句到包括那些爲好。
7.4. The try statement

+0

非常感謝。它的工作原理:)現在我理解了一個原則。我最初爲Octave編寫了這個腳本。有一個不同的原則。感謝您的時間 :) – user2925613

相關問題