2013-01-22 42 views
0

我需要編寫一個不會給我錯誤的代碼,我想要一個打印再次嘗試。如何在Python中使用Except異常?

我在其他主題學習,但我不明白這一點。 我有這樣的代碼:你

def conversor(anosluz): 
    try: 
     km = float(anosluz * (9.459 * 10**12)) 
     return km 
    except Exception, e: 
     print 'Ooops! O valor que inseriste nao e o correcto, tenta de novo.', e 


if __name__=='__main__': 
    anosluz = input('Insira a distancia em anos luz: ') 
    resultado = conversor(anosluz) 
    print resultado 
+2

做哪一部分的它,你還不明白嗎?此代碼似乎已經工作。 – thegrinner

+0

但不起作用!我想,當我把一個輸入例如:'2..0',然後打印我想要的錯誤... –

回答

2

將你的代碼轉換成輸入/輸出和計算:

def conversor(anosluz): 
    # just convert the given anosluz into km 
    km = anosluz * (9.459 * 10**12) 
    return km 


if __name__=='__main__': 
    while True: 
     # repeat until *break* 
     anosluz = raw_input('Insira a distancia em anos luz: ') 
     try: 
      resultado = conversor(float(anosluz)) 
     except ValueError, e: 
      # oh, conversor raised an exception 
      print 'Ooops! O valor que inseriste nao e o correcto, tenta de novo.', e 
     else: 
      # no exception, print result and exit 
      print resultado 
      break 
+0

你的回答非常有用,非常感謝你 –

1

首先你必須使用input在python2。 如果要獲取整數使用int(raw_input()),否則使用float(raw_input())input確實不是將字符串轉換爲數字它執行代碼,所以您正在使用它創建程序安全性的巨大漏洞。

您可能用於獲取python的內置數據類型作爲輸入的其他函數是ast.literal_eval

其次,你可以使用一些循環:

result = None 
while True: 
    num = raw_input("Insert number: ") 
    try: 
     result = float(num) * (9.459 * 10**12) 
    except Exception: 
     print "Try again!" 
    else: 
     break 
print "The result is: ", result 

基本上是一個tryexcept語句塊的異常,並讓你處理。 在您的情況下,您希望重複輸入請求,因此您應該將輸入請求放入處理錯誤的循環中,並讓converser函數引發異常。