日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python学习笔记:错误,测试,调试(转)

發(fā)布時間:2025/3/15 python 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python学习笔记:错误,测试,调试(转) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

最近在學(xué)習(xí)深度學(xué)習(xí),已經(jīng)跑出了幾個模型,但Pyhton的基礎(chǔ)不夠扎實,因此,開始補習(xí)Python了,大家都推薦廖雪峰的課程,因此,開始了學(xué)習(xí),但光學(xué)有沒有用,還要和大家討論一下,因此,寫下這些帖子,廖雪峰的課程連接在這里:廖雪峰
Python的相關(guān)介紹,以及它的歷史故事和運行機制,可以參見這篇:python介紹
Python的安裝可以參見這篇:Python安裝
Python的運行模式以及輸入輸出可以參見這篇:Python IO
Python的基礎(chǔ)概念介紹,可以參見這篇:Python 基礎(chǔ)
Python字符串和編碼的介紹,可以參見這篇:Python字符串與編碼
Python基本數(shù)據(jù)結(jié)構(gòu):list和tuple介紹,可以參見這篇:Python list和tuple
Python控制語句介紹:ifelse,可以參見這篇:Python 條件判斷
Python控制語句介紹:循環(huán)實現(xiàn),可以參見這篇:Python循環(huán)語句
Python數(shù)據(jù)結(jié)構(gòu):dict和set介紹Python數(shù)據(jù)結(jié)構(gòu)dict和set
Python函數(shù)相關(guān):Python函數(shù)
Python高階特性:Python高級特性
Python高階函數(shù):Python高階函數(shù)
Python匿名函數(shù):Python匿名函數(shù)
Python裝飾器:Python裝飾器
Python偏函數(shù):Python偏函數(shù)
Python模塊:Python模塊
Python面向?qū)ο缶幊?#xff08;1):Python面向?qū)ο?
Python面向?qū)ο缶幊?#xff08;2):Python面向?qū)ο?#xff08;2)
Python面向?qū)ο缶幊?#xff08;3):Python面向?qū)ο?#xff08;3)
Python面向?qū)ο缶幊?#xff08;4):Pyhton面向?qū)ο?#xff08;4)
Python面向?qū)ο蟾呒壘幊?#xff08;上):Python面向?qū)ο蟾呒壘幊?#xff08;上)
Python面向?qū)ο蟾呒壘幊?#xff08;中上):Python面向?qū)ο蟾呒壘幊?#xff08;中上)
Python面向?qū)ο蟾呒壘幊?#xff08;中下):Python面向?qū)ο蟾呒壘幊?#xff08;中下)
Python面向?qū)ο蟾呒壘幊?#xff08;完):Python面向?qū)ο蟾呒壘幊?#xff08;完)
Python錯誤調(diào)試(起):Python調(diào)試:起
Python錯誤調(diào)試(承):Python調(diào)試:承
目錄:

  • 前言
  • 單元測試
    • 運行單元測試
    • setUp與tearDown
    • 小結(jié)

單元測試

如果你聽說過“測試驅(qū)動開發(fā)”(TDD:Test-Driven Development),單元測試你就不會陌生。
單元測試是用來對一個模塊、一個函數(shù)或者一個類來進行正確性檢驗的測試工作。
比如對函數(shù)abs(),我們可以編寫出以下幾個測試用例:

輸入正數(shù),比如1、1.2、0.99,期待返回值與輸入相同;輸入負數(shù),比如-1、-1.2、-0.99,期待返回值與輸入相反;輸入0,期待返回0;輸入非數(shù)值類型,比如None、[]、{},期待拋出TypeError。

把上面的測試用例放到一個測試模塊里,就是一個完整的單元測試。

如果單元測試通過,說明我們測試的這個函數(shù)能夠正常工作。如果單元測試不通過,要么函數(shù)有bug,要么測試條件輸入不正確,總之,需要修復(fù)使單元測試能夠通過。

單元測試通過后有什么意義呢?如果我們對abs()函數(shù)代碼做了修改,只需要再跑一遍單元測試,如果通過,說明我們的修改不會對abs()函數(shù)原有的行為造成影響,如果測試不通過,說明我們的修改與原有行為不一致,要么修改代碼,要么修改測試。

這種以測試為驅(qū)動的開發(fā)模式最大的好處就是確保一個程序模塊的行為符合我們設(shè)計的測試用例。在將來修改的時候,可以極大程度地保證該模塊行為仍然是正確的。
這也是一個合格的程序員應(yīng)該做的事情,保證程序的健壯性。
我們來編寫一個Dict類,這個類的行為和dict一致,但是可以通過屬性來訪問,用起來就像下面這樣:

>>> d = Dict(a=1, b=2) >>> d['a'] 1 >>> d.a 1

mydict.py代碼如下:

class Dict(dict):def __init__(self, **kw):super().__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

為了編寫單元測試,我們需要引入Python自帶的unittest模塊,編寫mydict_test.py如下:

import unittestfrom mydict import Dictclass TestDict(unittest.TestCase):def test_init(self):d = Dict(a=1, b='test')self.assertEqual(d.a, 1)self.assertEqual(d.b, 'test')self.assertTrue(isinstance(d, dict))def test_key(self):d = Dict()d['key'] = 'value'self.assertEqual(d.key, 'value')def test_attr(self):d = Dict()d.key = 'value'self.assertTrue('key' in d)self.assertEqual(d['key'], 'value')def test_keyerror(self):d = Dict()with self.assertRaises(KeyError):value = d['empty']def test_attrerror(self):d = Dict()with self.assertRaises(AttributeError):value = d.empty

編寫單元測試時,我們需要編寫一個測試類,從unittest.TestCase繼承。

以test開頭的方法就是測試方法,不以test開頭的方法不被認為是測試方法,測試的時候不會被執(zhí)行。

對每一類測試都需要編寫一個test_xxx()方法。由于unittest.TestCase提供了很多內(nèi)置的條件判斷,我們只需要調(diào)用這些方法就可以斷言輸出是否是我們所期望的。最常用的斷言就是assertEqual():

self.assertEqual(abs(-1), 1) # 斷言函數(shù)返回的結(jié)果與1相等

另一種重要的斷言就是期待拋出指定類型的Error,比如通過d[‘empty’]訪問不存在的key時,斷言會拋出KeyError:

with self.assertRaises(KeyError):value = d['empty']而通過d.empty訪問不存在的key時,我們期待拋出AttributeError:with self.assertRaises(AttributeError):value = d.empty

運行單元測試

一旦編寫好單元測試,我們就可以運行單元測試。最簡單的運行方式是在mydict_test.py的最后加上兩行代碼:

if __name__ == '__main__':unittest.main()這樣就可以把mydict_test.py當(dāng)做正常的python腳本運行:$ python mydict_test.py另一種方法是在命令行通過參數(shù)-m unittest直接運行單元測試:$ python -m unittest mydict_test ..... ---------------------------------------------------------------------- Ran 5 tests in 0.000sOK

這是推薦的做法,因為這樣可以一次批量運行很多單元測試,并且,有很多工具可以自動來運行這些單元測試。

setUp與tearDown

可以在單元測試中編寫兩個特殊的setUp()和tearDown()方法。這兩個方法會分別在每調(diào)用一個測試方法的前后分別被執(zhí)行。

setUp()和tearDown()方法有什么用呢?設(shè)想你的測試需要啟動一個數(shù)據(jù)庫,這時,就可以在setUp()方法中連接數(shù)據(jù)庫,在tearDown()方法中關(guān)閉數(shù)據(jù)庫,這樣,不必在每個測試方法中重復(fù)相同的代碼:

class TestDict(unittest.TestCase):def setUp(self):print('setUp...')def tearDown(self):print('tearDown...')

可以再次運行測試看看每個測試方法調(diào)用前后是否會打印出setUp…和tearDown…。

小結(jié)

小結(jié)
單元測試可以有效地測試某個程序模塊的行為,是未來重構(gòu)代碼的信心保證。
單元測試的測試用例要覆蓋常用的輸入組合、邊界條件和異常。
單元測試代碼要非常簡單,如果測試代碼太復(fù)雜,那么測試代碼本身就可能有bug。
單元測試通過了并不意味著程序就沒有bug了,但是不通過程序肯定有bug。

總結(jié)

以上是生活随笔為你收集整理的Python学习笔记:错误,测试,调试(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 波多野结衣黄色网址 | 免费激情视频网站 | 日韩av男人天堂 | 毛片网站在线播放 | 男女在线观看 | 国产日日夜夜 | 中文字幕第66页 | 91在线免费看片 | 欲乱美女| 久久中文字幕一区 | 这里只有精品9 | 黑人玩弄人妻一区二区三区四 | 日本美女黄色大片 | 成人性生交大片免费卡看 | 91蝌蚪九色 | 久久国产免费视频 | 九九热伊人 | 黄色特级毛片 | av超碰 | 好看的中文字幕 | 国产一久久 | 亚洲少妇18p| 国产98色在线 | 日韩 | 在线观看福利电影 | 色干网 | 男人你懂的网站 | 中出视频在线观看 | 亚洲高清在线观看 | 国产日日干 | 久久小视频 | www黄色av | 色窝窝无码一区二区三区成人网站 | 不卡av在线免费观看 | 一区二区乱子伦在线播放 | av黄色在线观看 | 毛片看看 | 国产一级高清 | 亚洲国产第一页 | 综合色播 | 日本乱码视频 | 后入内射无码人妻一区 | 看毛片网 | 日本不卡高清视频 | 欧美顶级metart裸体全部自慰 | 国产日韩片 | 中文有码在线观看 | 日韩欧美视频免费观看 | 国产欧美在线 | 天天操天天玩 | 黑色丝袜吻戏亲胸摸腿 | 日韩一区二区三区精 | 福利姬在线观看 | 欧洲av网站 | 久久久久亚洲av成人无码电影 | 亚洲精品久久久久中文字幕二区 | 激情瑟瑟 | 丰满岳跪趴高撅肥臀尤物在线观看 | 99激情| 亚洲午夜精品久久久久久人妖 | 98色| 亚洲a黄| 免费观看一级黄色片 | 国产精品久久久久久久久动漫 | 一吻定情2013日剧 | 色婷网| 中文字幕在线视频网站 | 亚洲婷婷久久综合 | 亚洲美女性视频 | 91在线观看视频 | 美女裸体跪姿扒开屁股无内裤 | 午夜少妇久久久久久久久 | 日韩美女视频网站 | 欧美日韩免费高清一区色橹橹 | 免费色站 | 武侠古典av | 秋霞成人 | 国产做爰免费观看视频 | aaaaa毛片| 亚洲系列中文字幕 | 三级av | 国产精品9191 | 久久免费国产精品 | 亚洲插插 | 久久精品视频在线观看 | 一级看片免费视频 | 国产精品亚洲欧美在线播放 | 小sao货cao死你 | 日韩欧美一级二级 | 夜夜操天天爽 | 黑人一级女人全片 | 91射区 | 女优色图 | 91蝌蚪91九色白浆 | 337p亚洲精品色噜噜狠狠 | 欧美精品一区二区三区久久久竹菊 | 亚洲福利天堂 | 台湾佬美性中文 | 美女毛片在线观看 | 羞辱狗奴的句子有哪些 |