2012-11-08 71 views
2

我是Python新手。請原諒我,如果我的問題聽起來很愚蠢。Python沒有捕獲嘗試/除了錯誤

下面的代碼會引發錯誤,但錯誤不會被try/except捕獲。我經歷過很多次,但看不出有什麼問題。

如果這裏的任何大師能夠向我展示問題,我將非常感激。

謝謝你的時間。

import decimal 

try: 
    Amount = str(decimal.Decimal('2.675a').quantize(decimal.Decimal('.01'), rounding=decimal.ROUND_HALF_UP)) 
    print Amount 
except ValueError: 
    print 'Error' 

我已經得到的錯誤是:

File "C:\Python27\lib\decimal.py", line 548, in __new__ 
    "Invalid literal for Decimal: %r" % value) 
File "C:\Python27\lib\decimal.py", line 3866, in _raise_error 
    raise error(explanation) 
InvalidOperation: Invalid literal for Decimal: '2.675a' 
+1

請包括實際的錯誤。 – rantanplan

+0

你有什麼錯誤?另外,'2.675a'似乎不是一個有效的十進制字符串。 'a'是什麼? – tzaman

+0

@tzaman'a'放置在那裏,以便發生錯誤。沒有'a',就不會有錯誤 – Mark

回答

5

的錯誤被你的代碼段提出是decimal.InvalidOperation例外。此例外不是ValueError的子類,因此與您的except子句不符。

我建議閱讀關於errors and exception handling的教程部分,以獲得有關如何處理Python代碼中的錯誤的概述。

+0

這些代碼在ValueError被刪除後工作。非常感謝。 – Mark

+3

不要只是把它改成裸露的,除了幾個明確定義的情況之外,你應該只捕捉你期望發生的錯誤。所以如果你期待'InvalidOperation'錯誤(例如,因爲你是從提供的字符串創建一個小數對象),直接捕獲該異常。如果你抓住了一切,它將隱藏真正的問題,並使你的程序更難調試。 –