<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python3十大經(jīng)典錯誤及解決辦法

          共 1598字,需瀏覽 4分鐘

           ·

          2020-08-14 15:37



          接觸了很多Python愛好者,有初學(xué)者,亦有轉(zhuǎn)行人。不論大家學(xué)習(xí)Python的目的是什么,總之,學(xué)習(xí)Python前期寫出來的代碼不報(bào)錯就是極好的。下面,嚴(yán)小樣兒為大家羅列出Python3十大經(jīng)典錯誤及解決辦法,供大家學(xué)習(xí)。

          一、 SyntaxError 語法錯誤

          (1)引號沒有成對出現(xiàn)
          報(bào)錯信息:
          1SyntaxError:EOL?while?scanning?string?literal
          錯誤示例:
          1string = 'hello world
          解決方法:
          字符串切記要放在引號中,單引號雙引號無所謂。當(dāng)一個字符串中包含單引號或雙引號時,很容易出現(xiàn)引號不配對的情況。
          (2)圓括號沒有成對出現(xiàn)
          報(bào)錯信息:
          1SyntaxError:unexpected?EOF?while?parsing
          錯誤示例1:
          1result?=?(1024+(512*2)/128
          錯誤示例2:
          1print('hello?world'
          解決方法:
          使圓括號成對出現(xiàn)。在書寫復(fù)雜的表達(dá)式或調(diào)用函數(shù)時會經(jīng)常遇到這個問題。

          (3)錯誤使用自操作運(yùn)算符++或--等
          報(bào)錯信息:
          1SyntaxError:invalid?syntax
          錯誤示例:
          1v?=?64
          2v++
          解決方法:
          在Python語言中,沒有類似C語言的++或--等自操作運(yùn)算符。與之類似功能的用法是+=或-=運(yùn)算符。例如,使用下面的代碼進(jìn)行讓變量v進(jìn)行自增1的操作。
          1v?+=?1
          (4)試圖使用等號(=)判斷兩個運(yùn)算量是否相等
          報(bào)錯信息:
          1SyntaxError:invalid?syntax
          錯誤示例:
          1if?v=64:
          2????print('hello?world')
          解決方法:
          在Python語言中使用兩個等號(==)作為判斷兩個運(yùn)算量是否相等的關(guān)系運(yùn)算符,而等號(=)是賦值運(yùn)算符。
          (6)錯誤使用Python語言關(guān)鍵字作為變量名
          報(bào)錯信息:
          1SyntaxError:?can`t?assign?to?keyword
          錯誤示例:
          1False=?1
          解決方法:
          不要使用Python語言關(guān)鍵字作為變量名、函數(shù)名或類名等。在Python Shell窗口中,使用help('keywords')指令可以查看Python語言的關(guān)鍵字列表。
          (7)忘記在if/elif/else/while/for/def/class等語句末尾添加冒號(:)
          報(bào)錯信息:
          1SyntaxError:invalid?syntax
          錯誤示例1:
          1a?=?'12345'
          2for?i in?a
          3????print(
          i)
          錯誤示例2:
          1def?sayhi()
          2????print('Hi')

          解決方法:
          在if/elif/else/while/for/def/class等語句末尾添加冒號(:)即可。牢記語法規(guī)則,多多練習(xí)多多敲代碼。
          (8)錯誤地使用了中文標(biāo)點(diǎn)符號
          報(bào)錯信息:
          1SyntaxError:?invalid?character?in?identifier
          錯誤示例1:
          1print('hello''world')
          2#?錯誤原因:逗號是中文標(biāo)點(diǎn)符號
          錯誤示例2:
          1for?i?in?range(10):
          2#?錯誤原因:冒號是中文標(biāo)點(diǎn)符號
          解決方法:
          除了字符串中可以有中文外,其它任何情況均使用英文狀態(tài)進(jìn)行編輯。

          二、 IndentationError 縮進(jìn)錯誤

          報(bào)錯信息:
          1IndentationError:unindent does not?match?any?outer?indentation?level
          2IndentationError:expected an indented block
          錯誤示例:
          1a?=?2
          2while?a?0:
          3??????print('hello')
          4????a -= 1
          5else:
          6????print('0.0')
          解決方法:
          上述代碼中while語句體內(nèi)的代碼縮進(jìn)沒有對齊。正確使用縮進(jìn)排版代碼。當(dāng)代碼是從其它地方復(fù)制并粘貼過來的時候,這個錯誤較多見。

          三、 NameError 名字錯誤

          當(dāng)變量名、函數(shù)名或類名等書寫錯誤,或者函數(shù)在定義之前就被調(diào)用等情況下,就會導(dǎo)致名字錯誤。
          報(bào)錯信息:
          1NameError:?name?'pirnt'?is?not?defined
          2NameError:?name?'sayhi'?is?not?defined
          3NameError:?name?'pd'?is?not?defined
          錯誤示例1:
          1pirnt('hello?world')
          2#?錯誤原因:print拼寫錯誤。
          錯誤示例2:
          1sayhi()
          2
          3def?sayhi():
          4????pass
          5#?錯誤原因:在函數(shù)定義之前對函數(shù)進(jìn)行調(diào)用。
          錯誤示例3:
          1pd.read_excel(r'file.xlsx')
          2#?錯誤原因:在調(diào)用pandas方法前并未導(dǎo)入pandas庫或者并未起別名為pd。
          解決方法:
          正確書寫變量名、函數(shù)名或類名等,在使用變量前先進(jìn)行賦值,將函數(shù)的定義放在函數(shù)調(diào)用之前,在使用第三方庫前先進(jìn)行導(dǎo)入、調(diào)包等等。即保證某個名字(標(biāo)識符)先存在,才能被使用。

          四、 TypeError 類型錯誤

          (1)整數(shù)和字符串不能進(jìn)行連接操作
          報(bào)錯信息:
          1TypeError:?Can`t?convert?'int'?object?to?str?implicitly
          2TypeError:?unsupported?operand?type(s)?for?+?:?'float'?and?'str'
          錯誤示例1:
          1print('score:'+100)
          錯誤示例2:
          1print(9.8?+?'seconds')
          解決方法:
          在整數(shù)、浮點(diǎn)數(shù)或布爾值與字符串進(jìn)行連接操作之前,先使用str()函數(shù)將其轉(zhuǎn)換為字符串類型。
          (2)調(diào)用函數(shù)時參數(shù)的個數(shù)不正確,或者未傳遞參數(shù)
          報(bào)錯信息:
          1TypeError:?input?expected?at?most?1?arguments,got?2
          2TypeError:?say()?missing?1?required?positional?argument:'words'
          錯誤示例1:
          1input('輸入姓名','年齡')
          2#?錯誤原因:試圖給input()函數(shù)提供第2個參數(shù)。
          錯誤示例2:
          1def?say(words):
          2????print(words)
          3
          4say()
          5#?錯誤原因:調(diào)用函數(shù)時未傳遞參數(shù)。
          解決方法:
          記住函數(shù)用法,了解函數(shù)的參數(shù)定義,使用正確的方法調(diào)用函數(shù)即可。

          五、 KeyError 鍵錯誤

          使用不存在的鍵名訪問字典中的元素,就會發(fā)生這個錯誤。
          報(bào)錯信息:
          1KeyError:?'c'
          錯誤示例:
          1d?=?{'a':1,'b':2}
          2print(d['c'])
          解決方法:
          在訪問字典中的元素時,先用in關(guān)鍵字檢測要訪問的鍵名是否存在,或者是使用字典和get()方法安全地訪問字典元素。

          六、 IndexError 索引錯誤

          當(dāng)訪問列表的索引超出列表范圍時,就會出現(xiàn)索引錯誤。
          報(bào)錯信息:
          1IndexError:?list?index?out?of?range
          錯誤示例:
          1a?=?[1,2,3]
          2print(a[3])
          3#?錯誤原因:列表a中不存在第4個索引。列表的索引從0開始編號。
          解決方法:
          通過len()函數(shù)獲取列表的長度,然后判斷要訪問的索引是否超出列表范圍。

          七、 UNboundLocalError 未初始化本地變量錯誤

          在函數(shù)中,如果對未聲明的全局變量進(jìn)行修改操作,將會遇到這個錯誤。
          報(bào)錯信息:
          1UnboundLocalError:?local?variable?'s'?referenced?before?assignment
          錯誤示例:
          1s?=?1
          2
          3def?test():
          4????s?+=?1
          5????print(s)
          6
          7test()
          8#?錯誤原因:在函數(shù)內(nèi)對未聲明的全局變量s進(jìn)行了自增操作。
          9# Python將變量s視為一個本地的局部變量,但該變量未初始化。
          解決方法:
          在函數(shù)內(nèi)使用全局變量時,使用global關(guān)鍵字對其進(jìn)行聲明即可。

          八、 AttributeError 屬性錯誤

          報(bào)錯信息:
          1AttributeError:?'tuple'?object?has?no?attribute?'append'
          2AttributeError:?'DataFrame'?object?has?no?attribute?'col'
          錯誤示例1:
          1t?=?(1,2,3)
          2t.append(4)
          3#?錯誤原因:元祖不可變。
          錯誤示例2:
          1df?=?pd.read_excel(r'data.xlsx')
          2df.col
          3#?錯誤原因:DataFrame沒有col屬性,應(yīng)該為columns。
          解決方法:
          正確書寫類的屬性名,不要發(fā)生書寫錯誤。深刻理解元祖,列表的區(qū)別,可將元祖轉(zhuǎn)換為列表添加元素。

          九、 ModuleNotFoundError 模塊不存在

          報(bào)錯信息:
          1ModuleNotFoundError:?No?module?named?'pandas'
          錯誤示例1:
          1import?pandas?as?pd
          2#?沒有導(dǎo)入成功,報(bào)上面錯誤。
          解決方法:
          這種報(bào)錯常見于兩種場景中,第一、未下載、安裝該模塊;第二、將調(diào)用的模塊路徑與被調(diào)用的模塊路徑不一致等。第一種情況直接下載安裝即可,在cmd中,pip install xxx;第二種情況電腦中可能存在多個版本的Python,建議保留一個常用的即可。

          十、 FileNotFoundError 文件不存在

          報(bào)錯信息:
          1FileNotFoundError:?File?b'E:\test\test_data.csv'?does?not?exist
          錯誤示例:
          1pd.read_csv('E:\test\test_data.csv')
          2#?錯誤原因:路徑中包含'\t',系統(tǒng)錯誤地認(rèn)為是制表符。
          解決方法:
          在確保該路徑下確實(shí)存在所寫文件后,在讀取文件路徑前面加'r',表示只讀,作為文件路徑讀??;或者使用雙斜杠'\ \'來進(jìn)行轉(zhuǎn)義,形如:'E:\ \test\ \test_data.csv'。偶爾也會發(fā)生文件名、路徑的確寫錯,犯一些低級錯誤。

          結(jié)束語

          報(bào)錯,并不可怕,那是一個學(xué)習(xí)的機(jī)會。現(xiàn)在搜索引擎這么發(fā)達(dá),只要把錯誤信息放進(jìn)去,一搜就出來了各種解決之道。

          python爬蟲人工智能大數(shù)據(jù)公眾號


          瀏覽 36
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  老逼AV| 操逼首页| 8050午夜一级 | 亚洲电影天堂在线 | 亚洲黄色电影精品 |