來源丨網絡
大家好,我是菜鳥哥。
如果說寫代碼最害怕什麼,那無疑是Bug。而對於新手來說,剛剛接觸編程,在享受寫代碼的成就感時,往往也會被各式各樣的Bug弄得暈頭轉向。
今天,我們就做了一期Python常見報錯的分享,拯救你的代碼!
01
縮進錯誤(IndentationError)
在Python中,所有代碼都是通過正確的空格排列的。所以,無論是多出來空格,還是缺少空格,整個代碼都不會運行,並且僅返回一個錯誤函數。
Python代碼遵循PEP8空白規范,每一級縮進使用4個空格。
錯誤示例
a=1
b=2
if a<b:
print a
修正
a=1
b=2
if a<b:
print a
02
Tab 和空格混用(TabError)
此類報錯是由於同時使用制表符和空格進行編碼導致的,tab鍵本質上是制表符,而非縮進符。由於不同文本編輯器中制表符代表的空格寬度不一,建議使用空格。
03
語法錯誤(SyntaxError)
語法錯誤的原因包含下列三種:
無效語法(invalid syntax)
標點符號遺漏,中英文符號混用,拼寫錯誤,變量名或者函數名使用了關鍵字。
標識符中有無效字符(invalid character in identifier)
代碼中出現了無法識別的字符,檢查一下是否有多余字符或者中文字符。
檢查到不完整的字符串(EOL while scanning string litera)
很多情況下是由於字符串兩邊的引號不統一。
錯誤示例
print( 'hello', 'world')
錯誤原因:逗號為中文逗號
報錯信息:SyntaxError: invalid character inidentifier
result = (1024+(512*2)/128
錯誤原因:圓括號沒有成對出現
報錯信息:SyntaxError:unexpected EOF whileparsing
if name =="A"
print("hello")
錯誤原因:忘記在if/elif/else/while/for/def/class等語句末尾添加冒號
報錯信息:SyntaxError:invalid syntax
03
變量名錯誤(NameErro)
變量名錯誤是最普通也是最常會遇到的內建報錯類型,經常會出現在Python變量命名上,如果找不到變量就會引發NameError。關於變量名的規則,需要牢記以下幾條:
變量名只能包含字母、數字和下劃線,不可用數字開頭;
變量名不能包含空格,但可使用下劃線來分隔其中的單詞;
不要將Python關鍵字和函數名用作變量名,如print;
變量名應既簡短又具有描述性;
慎用小寫字母l和大寫字母O,因為容易被錯看成數字1和0。
出現變量名錯誤,可以查看變量是否賦值,是否存在大小寫不統一或者變量名寫錯了的情況,找到後加以修正。
錯誤示例
message = "Hello!"
print(mesage)
錯誤原因:變量名拼寫錯誤,誤將massage拼寫為masge
報錯信息:NameError: name 'mesage' is not defined
05
索引錯誤(IndexError)
索引是項目在數組或列表中的位置,當我們嘗試從列表中訪問元素或從列表中不存在的索引中訪問元組時,就會發生這種異常。
例如,有一個包含10個元素的列表,索引在0到9之間,如果試圖訪問索引10或11或更多的元素,就會產生IndexError。
錯誤示例
a = [1,2,3]
print(a[3])
錯誤原因:列表a中不存在第4個索引,列表的索引從0開始編號
報錯信息:IndexError: string index out of range
06
鍵錯誤(KeyError)
在讀取字典中的key和value時,如 果key不存在,就會觸發KeyError錯誤。
錯誤示例
d = {'a':1,'b':2}
print(d['f'])
錯誤原因:鍵‘f’不存在
報錯信息:KeyError: 'f'
07
類型錯誤(TypeError)
在程序中使用不正確或不受支持的對象類型時,會引發該錯誤。如果嘗試調用不可調用的對象或通過非迭代標識符進行迭代,也會引發此錯誤。
錯誤示例
age=18
print("我的年齡是"+age)
錯誤原因:在使用“+”做拼接的時候,必須使用字符串,或者 把數字用str()函數轉化成字符串
報錯信息:TypeError:can only concatenate str(not"int")to str
08
屬性錯誤(AttributeError)
特性引用和賦值失敗時會引發屬性錯誤。
此類錯誤的原因是嘗試訪問未知的對象屬性,換句話說就是找不到對應對象的屬性。可以檢查類中構造函數__init__()是否寫正確,左右兩邊各兩條下劃線。
對於初學的小伙伴來說,代碼經常出現Bug並不代表著你學得不好。若是將一個個Bug看作游戲裡小怪,那麼消滅Bug的過程又何嘗不是升級的過程呢?
所以,努力加油吧!消滅Bug!
萬水千山總是情,點個 行不行。
推薦閱讀:
入門: 最全的零基礎學Python的問題 | 零基礎學了8個月的Python | 實戰項目 |學Python就是這條捷徑
干貨:爬取豆瓣短評,電影《後來的我們》 | 38年NBA最佳球員分析 | 從萬眾期待到口碑撲街!唐探3令人失望 | 笑看新倚天屠龍記 | 燈謎答題王 |用Python做個海量小姐姐素描圖 |碟中諜這麼火,我用機器學習做個迷你推薦系統電影
趣味:彈球游戲 | 九宮格 | 漂亮的花 | 兩百行Python《天天酷跑》游戲!
AI: 會做詩的機器人 | 給圖片上色 | 預測收入 | 碟中諜這麼火,我用機器學習做個迷你推薦系統電影
小工具: Pdf轉Word,輕松搞定表格和水印! | 一鍵把html網頁保存為pdf!| 再見PDF提取收費! | 用90行代碼打造最強PDF轉換器,word、PPT、excel、markdown、html一鍵轉換 | 制作一款釘釘低價機票提示器! |60行代碼做了一個語音壁紙切換器天天看小姐姐!|
年度爆款文案
1).臥槽!Pdf轉Word用Python輕松搞定!
2).學Python真香!我用100行代碼做了個網站,幫人PS旅行圖片,賺個雞腿吃
3).首播過億,火爆全網,我分析了《乘風破浪的姐姐》,發現了這些秘密
4).80行代碼!用Python做一個哆來A夢分身
5).你必須掌握的20個python代碼,短小精悍,用處無窮
6).30個Python奇淫技巧集
7).我總結的80頁《菜鳥學Python精選干貨.pdf》,都是干貨
8).再見Python!我要學Go了!2500字深度分析!
9).發現一個舔狗福利!這個Python爬蟲神器太爽了,自動下載妹子圖片
點閱讀原文,看B站我的20個視頻!