Python-八、DEBUG


1沾谜、BUG的由來

一位女科學(xué)家和一只臭蟲的故事。
故事的主人公是被譽(yù)為計(jì)算機(jī)程序之母的格蕾絲·赫伯(Grace Hopper)胀莹。時(shí)光回到1947年基跑,當(dāng)時(shí)她正在為下圖這個(gè)龐然大物編制程序。

MARKⅡ

這是世界上第一部萬用計(jì)算機(jī)的進(jìn)化版——馬克2號(hào)(Mark II)嗜逻。瞧瞧這龐大的機(jī)器涩僻,可想而知,格蕾絲不止要做腦力活兒栈顷,還得做體力活兒逆日。

有一天,她正在調(diào)試程序(就跟我們?cè)陔娔X上運(yùn)行代碼萄凤,看終端有沒有報(bào)錯(cuò)一樣)室抽,結(jié)果老是出現(xiàn)故障。

層層排查后靡努,她拆開了繼電器坪圾,結(jié)果發(fā)現(xiàn)有只飛蛾被夾扁在觸點(diǎn)中間晓折,從而“卡”住了機(jī)器的運(yùn)行。揪出來之后兽泄,格蕾絲幽默地把這只幺蛾子的尸體貼在了她的工作日志上漓概,并喊它叫bug(臭蟲)。

從此病梢,bug就化身計(jì)算機(jī)領(lǐng)域里程序故障的代名詞胃珍,成為程序員一生如影隨形的“親密敵人”。而我們也自然把排除程序故障叫做debug蜓陌。

Debug是程序開發(fā)中需耗費(fèi)大量時(shí)間與精力的一項(xiàng)工作觅彰,我們將在本章中學(xué)習(xí)Debug的方法。


2钮热、出BUG的常見四種類型

出BUG一般常見的類型分為“粗心”填抬、“知識(shí)不熟練”、“思路不清”隧期、“被動(dòng)出錯(cuò)”飒责。


2.1、粗心

比如下面這段代碼:

a = input('請(qǐng)輸入密碼:')
if a == '123456'
    print('通過')
報(bào)錯(cuò)

仔細(xì)看報(bào)錯(cuò)仆潮,其中有3個(gè)關(guān)鍵信息读拆。
(1)line 2代表這個(gè)bug出現(xiàn)在第2行,所以鸵闪,我們?cè)贒ebug的時(shí)候檐晕,可以優(yōu)先從第2行開始檢查。
(2)^代表bug發(fā)生的位置蚌讼,這里指出的位置是第二行末尾辟灰。
(3)這一行寫的是錯(cuò)誤類型,SyntaxError指的是語法錯(cuò)誤篡石。

在python的使用中芥喇,還有縮進(jìn)、中文符號(hào)的使用等等因粗心造成的常見問題凰萨,所以我們需要一張清單讓我們完成自我檢查啦继控!

自檢清單

1.漏了末尾的冒號(hào),如if語句胖眷、循環(huán)語句武通、定義函數(shù)
2.縮進(jìn)錯(cuò)誤,忘記縮進(jìn)或者縮進(jìn)和空格混用
3.把英文符號(hào)寫成了中文符號(hào)
4.字符串拼接的時(shí)候珊搀,把字符串和數(shù)字拼在一起
5.沒有定義變量
6.'=='判斷符號(hào)和定義符號(hào)'='混用


2.2冶忱、知識(shí)不熟練

a = []
a.append('A','B','C')
print(a)

比如上述的代碼,就是對(duì)append()函數(shù)的運(yùn)用不熟練的運(yùn)用境析,正確的append用法是:
append()函數(shù)是列表的一個(gè)方法囚枪,要用句點(diǎn).調(diào)用派诬,且append()每次只能接受一個(gè)參數(shù),所以正確的寫法是這樣:

a = []
a.append('A')
a.append('B')
a.append('C')
print(a)

2.3链沼、思路不清

思路不清指的是當(dāng)我們解決比較復(fù)雜的問題時(shí)默赂,由于我們對(duì)細(xì)節(jié)和實(shí)現(xiàn)手段思考得不夠清楚,要么導(dǎo)致一步錯(cuò)括勺,步步錯(cuò)放可;要么雖然沒有報(bào)錯(cuò),但是程序沒有達(dá)到我們想要的效果朝刊。

我們可以用兩個(gè)工具來理清思路:
1、print()函數(shù)
2蜈缤、用#暫時(shí)注釋部分代碼

movie = {
'妖貓傳':['黃軒','染谷將太'],
'無問西東':['章子怡','王力宏','祖峰'],
'超時(shí)空同居':['雷佳音','佟麗婭'],
}

name=input('你查詢的演員是拾氓?')
for i in movie:
    actors = [i]           #這里的actors取值錯(cuò)誤了,正確用法為actors=movie[i]
    print(actors)         #打印當(dāng)前的actors底哥,看看問題出在哪咙鞍。
    if name in actors:
        print(name+'出演了'+i)

解決思路不清bug的三步法##

1.用#把感覺會(huì)出問題的代碼段注釋掉
2.利用print()語句,展示關(guān)鍵步驟的操作結(jié)果
3.根據(jù)print出的結(jié)果趾徽,一步步尋找和解決問題


2.4续滋、被動(dòng)出錯(cuò)

被動(dòng)掉坑,是指有時(shí)候你的代碼邏輯上并沒有錯(cuò)孵奶,但可能因?yàn)橛脩舻腻e(cuò)誤操作或者是一些“例外情況”而導(dǎo)致程序崩潰疲酌。

我們舉個(gè)例子,當(dāng)運(yùn)行以下代碼的時(shí)候了袁,如果輸入的東西不是數(shù)字朗恳,則程序一定會(huì)報(bào)錯(cuò):

age = int(input('你今年幾歲了?'))    #我輸入了漢字十八歲
if age < 18:
    print('不可以喝酒噢')

一定會(huì)報(bào)錯(cuò)的载绿。

另:
你今年幾歲了粥诫?153 #我輸入了153
153 #屏幕上打印了我的輸出,看起來是數(shù)字
<class 'str'> #但如果用<type(age)>來打印的話崭庸,顯示是字符串類型

為了不讓一些無關(guān)痛癢的小錯(cuò)影響程序的后續(xù)執(zhí)行怀浆,Python給我們提供了一種異常處理的機(jī)制,可以在異常出現(xiàn)時(shí)即時(shí)捕獲怕享,然后內(nèi)部消化掉执赡,讓程序繼續(xù)運(yùn)行。這就是try...except...語句函筋,具體用法如下:

try...except...

來搀玖,讓我們使用以下這個(gè)函數(shù)。

while True:
    try:
        age = int(input('你今年幾歲了驻呐?'))
        break
    except ValueError:
        print('你輸入的不是數(shù)字灌诅!')

if age < 18:
    print('不可以喝酒噢')

<有需要的話可以在草鳥教程查報(bào)錯(cuò)>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末芳来,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子猜拾,更是在濱河造成了極大的恐慌即舌,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挎袜,死亡現(xiàn)場(chǎng)離奇詭異顽聂,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)盯仪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門紊搪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人全景,你說我怎么就攤上這事耀石。” “怎么了爸黄?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵滞伟,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我炕贵,道長(zhǎng)梆奈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任称开,我火速辦了婚禮亩钟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鳖轰。我一直安慰自己径荔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布脆霎。 她就那樣靜靜地躺著总处,像睡著了一般。 火紅的嫁衣襯著肌膚如雪睛蛛。 梳的紋絲不亂的頭發(fā)上鹦马,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音忆肾,去河邊找鬼荸频。 笑死,一個(gè)胖子當(dāng)著我的面吹牛客冈,可吹牛的內(nèi)容都是我干的旭从。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼和悦!你這毒婦竟也來了退疫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤鸽素,失蹤者是張志新(化名)和其女友劉穎褒繁,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體馍忽,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡棒坏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了遭笋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坝冕。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖瓦呼,靈堂內(nèi)的尸體忽然破棺而出喂窟,到底是詐尸還是另有隱情,我是刑警寧澤吵血,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站偷溺,受9級(jí)特大地震影響蹋辅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜挫掏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一侦另、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧尉共,春花似錦褒傅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至剧蚣,卻和暖如春支竹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鸠按。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工礼搁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人目尖。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓馒吴,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子饮戳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 第一部分Common Lisp介紹第1章 介紹一下Lisp你在學(xué)的時(shí)候覺得已經(jīng)明白了豪治,寫的時(shí)候更加確信了解了,教別...
    geoeee閱讀 2,941評(píng)論 5 8
  • Python語言特性 1 Python的函數(shù)參數(shù)傳遞 看兩個(gè)如下例子莹捡,分析運(yùn)行結(jié)果: 代碼一: a = 1 def...
    時(shí)光清淺03閱讀 486評(píng)論 0 0
  • Python語言特性 1 Python的函數(shù)參數(shù)傳遞 看兩個(gè)如下例子鬼吵,分析運(yùn)行結(jié)果: 代碼一: a = 1 def...
    伊森H閱讀 3,062評(píng)論 0 15
  • 寫在前面的話 代碼中的# > 表示的是輸出結(jié)果 輸入 使用input()函數(shù) 用法 注意input函數(shù)輸出的均是字...
    FlyingLittlePG閱讀 2,753評(píng)論 0 8
  • [再見,北京篮赢,從此我們兩清齿椅。 別問我歸途,在你的街启泣,我委屈到天明涣脚。 我曾把熱情和希望播在這里,可你不領(lǐng)情寥茫。 拉桿箱...
    一枚影子閱讀 148評(píng)論 0 0