2017-10-11 55 views
0

我對python相當陌生並試圖處理一個允許我顯示導致失敗的兩點的錯誤。一個變量在函數內,另一個變量在函數外。我嘗試下面的代碼:Python中的函數調用之外的重新打印錯誤

def fun(x): 
    z = 0.5 * x 
    if z == 1.0: 
     return z 
    else: 
     raise Exception('z is not 1.0') 

if __name__ == '__main__': 
    y = 9.0 
    x = y/4.0 
    try: 
     print fun(x) 
    except fun as err: 
     print 'y is %f' % y 
     print err 

所以,如果y = 8.0,然後x = 2.0z = 1.0和我很好。但是,如果y = 9.0然後z != 10,我想顯示錯誤和值yyfun()之內無法訪問,所以我可以在那裏完成。

我意識到這是一個毫無意義的例子。實際上,我將一行數據從一個文件傳遞到fun(),並且我想fun()將引發該錯誤的行部分引發錯誤,但它不知道文件名。

感謝您的幫助!

回答

0

使用您的外部try/except來捕獲和響應fun()內的預期Exception

你基本上有了它,只需要改變except fun as err:except Exception as err:

def fun(x): 
    z = 0.5 * x 
    if z == 1.0: 
     return z 
    else: 
     raise Exception('z is not 1.0') 

if __name__ == '__main__': 
    y = 9.0 
    x = y/4.0 
    try: 
     print fun(x) 
    except Exception as err: 
     print 'y is %f' % y 
     print err 
+0

但功能沒有訪問變量y。我希望能夠讓用戶知道導致錯誤的y和z的值。除非我誤解。 – John

+0

您可以重寫您的示例以更像您的生產代碼嗎?現在'try/except'行*可以*訪問'y'變量。即使'fun()'是一個單獨的函數,它只會引發'Exception'。 'try/except'是代碼運行,捕獲並報告'fun()'引發的錯誤。 –

+0

好的,謝謝。我發現我很困惑。你100%正確。我沒有意識到你實際編輯了代碼並完全回答了我的問題。在except行中我需要Exception。這是我無法弄清楚的。謝謝! – John