try:
print 'try...'
r = 10 / 0
print 'result:', r
except zerodivisionerror, e:
print 'except:', e
finally:
print 'finally...'
print 'end'
如果不捕獲錯誤,自然可以讓python的直譯器來列印出錯誤堆疊,但程式也同時結束了
利用python內建的logiing模組可以非常容易地記錄錯誤資訊,同時讓程式繼續執行下去
import logging
def foo(s):
return 10 / int(s)
def bar(s):
return foo(s) * 2
def main():
try:
bar('0')
except standarderror, e:
logging.exception(e)
main()
print 'end'
只有在必要的時候才定義我們自己的錯誤型別。如果可以選擇python已有的內建的錯誤型別(比如valueerror,typeerror),盡量使用python內建的錯誤型別。
class fooerror(standarderror):
pass
def foo(s):
n = int(s)
if n==0:
raise fooerror('invalid value: %s' % s)
return 10 / n
def foo(s):
n = int(s)
assert n != 0, 'n is zero!'
#assert的意思是,表示式n != 0應該是true,否則,後面的**就會出錯。
return 10 / n
def main():
foo('0')
單元測試:用來對乙個模組、乙個函式或者乙個類來進行正確性檢驗的測試工作,可以有效地測試某個程式模組的行為,是未來重構**的信心保證。
單元測試的測試用例要覆蓋常用的輸入組合、邊界條件和異常。
doctest非常有用,不但可以用來測試,還可以直接作為示例**
什麼輸出也沒有。這說明我們編寫的doctest執行都是正確的
當模組正常匯入時,doctest不會被執行。只有在命令列執行時,才執行doctest。所以,不必擔心doctest會在非測試環境下執行。
class dict(dict):
'''****** dict but also support access as x.y style.
>>> d1 = dict()
>>> d1['x'] = 100
>>> d1.x
100>>> d1.y = 200
>>> d1['y']
200>>> d2 = dict(a=1, b=2, c='3')
>>> d2.c
'3'>>> d2['empty']
traceback (most recent call last):
...keyerror: 'empty'
>>> d2.empty
traceback (most recent call last):
...attributeerror: 'dict' object has no attribute 'empty'
'''def __init__(self, **kw):
super(dict, self).__init__(**kw)
def __getattr__(self, key):
try:
return self[key]
except keyerror:
raise attributeerror(r"'dict' object has no attribute '%s'" % key)
def __setattr__(self, key, value):
self[key] = value
if __name__=='__main__':
import doctest
doctest.testmod()
python錯誤 除錯和測試
錯誤 除錯和測試 當我們認為某些 可能會出錯時,就可以用try來執行這段 如果執行出錯,則後續 不會繼續執行,而是直接跳轉至錯誤處理 即except語句塊,執行完except後,如果有finally語句塊,則執行finally語句塊,至此,執行完畢。出錯的時候,一定要分析錯誤的呼叫棧資訊,才能定位錯...
python錯誤 除錯和測試
1.錯誤處理 1 try.except.finally try print try.r 10 int a print result r except valueerror as e print valueerror e except zerodivisionerror as e print zero...
錯誤 除錯和測試
在程式執行過程中,總會遇到各種各樣的錯誤。有的錯誤是程式編寫有問題造成的,比如本來應該輸出整數結果輸出了字串,這種錯誤我們通常稱之為bug,bug是必須修復的。有的錯誤是使用者輸入造成的,比如讓使用者輸入email位址,結果得到乙個空字串,這種錯誤可以通過檢查使用者輸入來做相應的處理。還有一類錯誤是...