|
接觸了很多Python愛(ài)好者,有初學(xué)者,亦有轉(zhuǎn)行人。不論大家學(xué)習(xí)Python的目的是什么,總之,學(xué)習(xí)Python前期寫出來(lái)的代碼不報(bào)錯(cuò)就是極好的。下面,嚴(yán)小樣兒為大家羅列出Python3十大經(jīng)典錯(cuò)誤及解決辦法,供大家學(xué)習(xí)。 一、 SyntaxError 語(yǔ)法錯(cuò)誤(1)引號(hào)沒(méi)有成對(duì)出現(xiàn) 報(bào)錯(cuò)信息: 1SyntaxError:EOL while scanning string literal 錯(cuò)誤示例: 1string = 'hello world 解決方法:字符串切記要放在引號(hào)中,單引號(hào)雙引號(hào)無(wú)所謂。當(dāng)一個(gè)字符串中包含單引號(hào)或雙引號(hào)時(shí),很容易出現(xiàn)引號(hào)不配對(duì)的情況。 (2)圓括號(hào)沒(méi)有成對(duì)出現(xiàn) 報(bào)錯(cuò)信息: 1SyntaxError:unexpected EOF while parsing 錯(cuò)誤示例1: 1result = (1024+(512*2)/128 錯(cuò)誤示例2: 1print('hello world' 解決方法:使圓括號(hào)成對(duì)出現(xiàn)。在書寫復(fù)雜的表達(dá)式或調(diào)用函數(shù)時(shí)會(huì)經(jīng)常遇到這個(gè)問(wèn)題。 (3)錯(cuò)誤使用自操作運(yùn)算符++或--等 報(bào)錯(cuò)信息: 1SyntaxError:invalid syntax 錯(cuò)誤示例: 1v = 642v++ 解決方法:在Python語(yǔ)言中,沒(méi)有類似C語(yǔ)言的++或--等自操作運(yùn)算符。與之類似功能的用法是+=或-=運(yùn)算符。例如,使用下面的代碼進(jìn)行讓變量v進(jìn)行自增1的操作。 1v += 1 (4)試圖使用等號(hào)(=)判斷兩個(gè)運(yùn)算量是否相等 報(bào)錯(cuò)信息: 1SyntaxError:invalid syntax 錯(cuò)誤示例: 1if v=64:2 print('hello world') 解決方法:在Python語(yǔ)言中使用兩個(gè)等號(hào)(==)作為判斷兩個(gè)運(yùn)算量是否相等的關(guān)系運(yùn)算符,而等號(hào)(=)是賦值運(yùn)算符。 (6)錯(cuò)誤使用Python語(yǔ)言關(guān)鍵字作為變量名 報(bào)錯(cuò)信息: 1SyntaxError: can`t assign to keyword 錯(cuò)誤示例: 1False= 1 解決方法:不要使用Python語(yǔ)言關(guān)鍵字作為變量名、函數(shù)名或類名等。在Python Shell窗口中,使用help('keywords')指令可以查看Python語(yǔ)言的關(guān)鍵字列表。 (7)忘記在if/elif/else/while/for/def/class等語(yǔ)句末尾添加冒號(hào)(:) 報(bào)錯(cuò)信息: 1SyntaxError:invalid syntax 錯(cuò)誤示例1: 1a = '12345'2for i in a3 print(i) 錯(cuò)誤示例2: 1def sayhi2 print('Hi') 解決方法:在if/elif/else/while/for/def/class等語(yǔ)句末尾添加冒號(hào)(:)即可。牢記語(yǔ)法規(guī)則,多多練習(xí)多多敲代碼。 (8)錯(cuò)誤地使用了中文標(biāo)點(diǎn)符號(hào) 報(bào)錯(cuò)信息: 1SyntaxError: invalid character in identifier 錯(cuò)誤示例1: 1print('hello','world')2# 錯(cuò)誤原因:逗號(hào)是中文標(biāo)點(diǎn)符號(hào) 錯(cuò)誤示例2: 1for i in range(10):2# 錯(cuò)誤原因:冒號(hào)是中文標(biāo)點(diǎn)符號(hào) 解決方法:除了字符串中可以有中文外,其它任何情況均使用英文狀態(tài)進(jìn)行編輯。
二、 IndentationError 縮進(jìn)錯(cuò)誤報(bào)錯(cuò)信息: 1IndentationError:unindent does not match any outer indentation level2IndentationError:expected an indented block 錯(cuò)誤示例: 1a = 22while a < 0:3 print('hello')4 a -= 15else:6 print('0.0') 解決方法:上述代碼中while語(yǔ)句體內(nèi)的代碼縮進(jìn)沒(méi)有對(duì)齊。正確使用縮進(jìn)排版代碼。當(dāng)代碼是從其它地方復(fù)制并粘貼過(guò)來(lái)的時(shí)候,這個(gè)錯(cuò)誤較多見(jiàn)。 三、 NameError 名字錯(cuò)誤當(dāng)變量名、函數(shù)名或類名等書寫錯(cuò)誤,或者函數(shù)在定義之前就被調(diào)用等情況下,就會(huì)導(dǎo)致名字錯(cuò)誤。 報(bào)錯(cuò)信息: 1NameError: name 'pirnt' is not defined2NameError: name 'sayhi' is not defined3NameError: name 'pd' is not defined 錯(cuò)誤示例1: 1pirnt('hello world')2# 錯(cuò)誤原因:print拼寫錯(cuò)誤。 錯(cuò)誤示例2: 1sayhi3def sayhi:4 pass5# 錯(cuò)誤原因:在函數(shù)定義之前對(duì)函數(shù)進(jìn)行調(diào)用。 錯(cuò)誤示例3: 1pd.read_excel(r'file.xlsx')2# 錯(cuò)誤原因:在調(diào)用pandas方法前并未導(dǎo)入pandas庫(kù)或者并未起別名為pd。 解決方法:正確書寫變量名、函數(shù)名或類名等,在使用變量前先進(jìn)行賦值,將函數(shù)的定義放在函數(shù)調(diào)用之前,在使用第三方庫(kù)前先進(jìn)行導(dǎo)入、調(diào)包等等。即保證某個(gè)名字(標(biāo)識(shí)符)先存在,才能被使用。 四、 TypeError 類型錯(cuò)誤(1)整數(shù)和字符串不能進(jìn)行連接操作 報(bào)錯(cuò)信息: 1TypeError: Can`t convert 'int' object to str implicitly2TypeError: unsupported operand type(s) for + : 'float' and 'str' 錯(cuò)誤示例1: 1print('score:'+100) 錯(cuò)誤示例2: 1print(9.8 + 'seconds') 解決方法:在整數(shù)、浮點(diǎn)數(shù)或布爾值與字符串進(jìn)行連接操作之前,先使用str函數(shù)將其轉(zhuǎn)換為字符串類型。 (2)調(diào)用函數(shù)時(shí)參數(shù)的個(gè)數(shù)不正確,或者未傳遞參數(shù) 報(bào)錯(cuò)信息: 1TypeError: input expected at most 1 arguments,got 22TypeError: say missing 1 required positional argument:'words' 錯(cuò)誤示例1: 1input('輸入姓名','年齡')2# 錯(cuò)誤原因:試圖給input函數(shù)提供第2個(gè)參數(shù)。 錯(cuò)誤示例2: 1def say(words):2 print(words)4say5# 錯(cuò)誤原因:調(diào)用函數(shù)時(shí)未傳遞參數(shù)。 解決方法:記住函數(shù)用法,了解函數(shù)的參數(shù)定義,使用正確的方法調(diào)用函數(shù)即可。
五、 KeyError 鍵錯(cuò)誤使用不存在的鍵名訪問(wèn)字典中的元素,就會(huì)發(fā)生這個(gè)錯(cuò)誤。 報(bào)錯(cuò)信息: 1KeyError: 'c' 錯(cuò)誤示例: 1d = {'a':1,'b':2}2print(d['c']) 解決方法:在訪問(wèn)字典中的元素時(shí),先用in關(guān)鍵字檢測(cè)要訪問(wèn)的鍵名是否存在,或者是使用字典和get方法安全地訪問(wèn)字典元素。 六、 IndexError 索引錯(cuò)誤當(dāng)訪問(wèn)列表的索引超出列表范圍時(shí),就會(huì)出現(xiàn)索引錯(cuò)誤。 報(bào)錯(cuò)信息: 1IndexError: list index out of range 錯(cuò)誤示例: 1a = [1,2,3]2print(a[3])3# 錯(cuò)誤原因:列表a中不存在第4個(gè)索引。列表的索引從0開始編號(hào)。 解決方法:通過(guò)len函數(shù)獲取列表的長(zhǎng)度,然后判斷要訪問(wèn)的索引是否超出列表范圍。 七、 UNboundLocalError 未初始化本地變量錯(cuò)誤在函數(shù)中,如果對(duì)未聲明的全局變量進(jìn)行修改操作,將會(huì)遇到這個(gè)錯(cuò)誤。 報(bào)錯(cuò)信息: 1UnboundLocalError: local variable 's' referenced before assignment 錯(cuò)誤示例: 1s = 13def test:4 s += 15 print(s)7test8# 錯(cuò)誤原因:在函數(shù)內(nèi)對(duì)未聲明的全局變量s進(jìn)行了自增操作。9# Python將變量s視為一個(gè)本地的局部變量,但該變量未初始化。 解決方法:在函數(shù)內(nèi)使用全局變量時(shí),使用global關(guān)鍵字對(duì)其進(jìn)行聲明即可。 八、 AttributeError 屬性錯(cuò)誤報(bào)錯(cuò)信息: 1AttributeError: 'tuple' object has no attribute 'append'2AttributeError: 'DataFrame' object has no attribute 'col' 錯(cuò)誤示例1: 1t = (1,2,3)2t.append(4)3# 錯(cuò)誤原因:元祖不可變。 錯(cuò)誤示例2: 1df = pd.read_excel(r'data.xlsx')2df.col3# 錯(cuò)誤原因:DataFrame沒(méi)有col屬性,應(yīng)該為columns。 解決方法:正確書寫類的屬性名,不要發(fā)生書寫錯(cuò)誤。深刻理解元祖,列表的區(qū)別,可將元祖轉(zhuǎn)換為列表添加元素。
九、 ModuleNotFoundError 模塊不存在報(bào)錯(cuò)信息: 1ModuleNotFoundError: No module named 'pandas' 錯(cuò)誤示例1: 1import pandas as pd2# 沒(méi)有導(dǎo)入成功,報(bào)上面錯(cuò)誤。 解決方法:這種報(bào)錯(cuò)常見(jiàn)于兩種場(chǎng)景中,第一、未下載、安裝該模塊;第二、將調(diào)用的模塊路徑與被調(diào)用的模塊路徑不一致等。第一種情況直接下載安裝即可,在cmd中,pip install xxx;第二種情況電腦中可能存在多個(gè)版本的Python,建議保留一個(gè)常用的即可。 十、 FileNotFoundError 文件不存在報(bào)錯(cuò)信息: 1FileNotFoundError: File b'E:\test\test_data.csv' does not exist 錯(cuò)誤示例: 1pd.read_csv('E:\test\test_data.csv')2# 錯(cuò)誤原因:路徑中包含'\t',系統(tǒng)錯(cuò)誤地認(rèn)為是制表符。 解決方法:在確保該路徑下確實(shí)存在所寫文件后,在讀取文件路徑前面加'r',表示只讀,作為文件路徑讀?。换蛘呤褂秒p斜杠'\ \'來(lái)進(jìn)行轉(zhuǎn)義,形如:'E:\ \test\ \test_data.csv'。偶爾也會(huì)發(fā)生文件名、路徑的確寫錯(cuò),犯一些低級(jí)錯(cuò)誤。 結(jié)束語(yǔ)報(bào)錯(cuò),并不可怕,那是一個(gè)學(xué)習(xí)的機(jī)會(huì)?,F(xiàn)在搜索引擎這么發(fā)達(dá),只要把錯(cuò)誤信息放進(jìn)去,一搜就出來(lái)了各種解決之道。
|
|
|
來(lái)自: flyk0tcfb46p9f > 《AI》