Python中如何處理常見(jiàn)報(bào)錯(cuò)
1.首先是常見(jiàn)的語(yǔ)法錯(cuò)誤。
2.然后是基礎(chǔ)語(yǔ)法中的常見(jiàn)異常。
3.最后是操作文件過(guò)程中的常見(jiàn)異常,這部分也是重難點(diǎn)知識(shí)。
這是我們?cè)诮K端比較常見(jiàn)的報(bào)錯(cuò)信息:
按照 Python 官方文檔的定義,我們?cè)诮K端見(jiàn)到的“錯(cuò)誤消息”至少可以被分為兩類:語(yǔ)法錯(cuò)誤(syntax errors)和異常(exceptions) 。
語(yǔ)法錯(cuò)誤(syntax errors)是初學(xué)者最容易犯的錯(cuò)誤,簡(jiǎn)單來(lái)說(shuō)就是代碼不符合 Python 的基本語(yǔ)法規(guī)范而導(dǎo)致程序出了問(wèn)題。
當(dāng)你的代碼完全符合 Python 的語(yǔ)法規(guī)范后,就該嘗試運(yùn)行程序了。但在程序運(yùn)行過(guò)程中,還是有可能會(huì)發(fā)生問(wèn)題,我們把這類問(wèn)題稱為異常(exceptions)。
比如兩種常見(jiàn)的語(yǔ)法錯(cuò)誤 SyntaxError 和 IndentationError 以及它們產(chǎn)生的原因和相應(yīng)的解決辦法。
首先我們來(lái)看看 SyntaxError 。
第一種:SyntaxError: invalid syntax(無(wú)效語(yǔ)法),這是語(yǔ)法錯(cuò)誤中最常見(jiàn)的一種了,通常是由下面幾種情況引起的:
一、遺漏了標(biāo)點(diǎn)符號(hào)。
二、關(guān)鍵字拼寫(xiě)錯(cuò)誤或遺漏。
三、變量名或函數(shù)名使用了關(guān)鍵字。
第二種:SyntaxError: invalid character in identifier(標(biāo)識(shí)符中有無(wú)效字符),這種錯(cuò)誤一般是由于代碼里使用了大量中文符號(hào),比如中文括號(hào),中文逗號(hào),中文冒號(hào)和中文引號(hào)。這有可能是你在寫(xiě)代碼時(shí)頻繁地切換中英文輸入法所造成的。
第三種:SyntaxError: EOL while scanning string literal(檢查到不完整的字符串),這種情況通常是因?yàn)檫z漏了字符串兩邊的引號(hào),或者混用了引號(hào)(即字符串兩邊的引號(hào)不統(tǒng)一)。解決辦法也很簡(jiǎn)單,仔細(xì)檢查字符串兩頭的引號(hào)是否有遺漏,而且需要記住,單引號(hào)和單引號(hào)匹配,雙引號(hào)和雙引號(hào)匹配,三引號(hào)和三引號(hào)匹配。
圖片總結(jié)一下:
第二個(gè)要介紹的常見(jiàn)語(yǔ)法錯(cuò)誤就是 IndentationError,即縮進(jìn)錯(cuò)誤。 在 Python 中,冒號(hào)下面的縮進(jìn)會(huì)幫助程序區(qū)分代碼之間的層次,這些不同的層次代表了代碼運(yùn)行的邏輯及先后順序。但如果在需要縮進(jìn)的語(yǔ)句下面沒(méi)有使用正確的縮進(jìn)層級(jí),甚至沒(méi)有使用縮進(jìn),程序就會(huì)報(bào)錯(cuò)。
比如兩種常見(jiàn)的縮進(jìn)錯(cuò)誤:
第一種:IndentationError: expected an indented block(需要縮進(jìn)的代碼塊),這種多半是由于某些需要縮進(jìn)的地方?jīng)]有縮進(jìn)導(dǎo)致的,修復(fù)這種縮進(jìn)錯(cuò)誤的方法也十分簡(jiǎn)單 —— 對(duì)癥下藥,理清代碼的運(yùn)行順序與邏輯,在應(yīng)該縮進(jìn)的地方(例如:if 條件判斷,for 循環(huán),while 循環(huán),def 函數(shù)定義,class 類的創(chuàng)建)加入縮進(jìn)即可。
第二種:IndentationError: unindent does not match any outer indentation level(縮進(jìn)內(nèi)容不匹配任何一個(gè)層級(jí)),這種主要是因?yàn)槟骋恍械目s進(jìn)沒(méi)有和其他位置對(duì)齊使得程序無(wú)法找到匹配的代碼塊導(dǎo)致的,解決辦法就需要我們理清代碼塊的層級(jí)并將縮進(jìn)對(duì)齊。
總結(jié)如下:
接著我們來(lái)看看基礎(chǔ)語(yǔ)法中常見(jiàn)的異常,第一個(gè)要介紹的是基礎(chǔ)語(yǔ)法中常見(jiàn)的異常 TypeError,即類型錯(cuò)誤。
區(qū)分異常和錯(cuò)誤的方法就需要我們?nèi)ビ^察終端的提示信息,一般情況下,異常的“錯(cuò)誤消息”會(huì)顯示Traceback (most recent call last),而語(yǔ)法錯(cuò)誤就不會(huì)顯示。
下面列舉三種較為常見(jiàn)的類型錯(cuò)誤:
第一種:TypeError: unsupported operand type(s) for …(不支持的運(yùn)算)
第二種:TypeError: can only concatenate str (not "int") to str (只能用字符串拼接字符串)
第三種:TypeError: 'xxx' object is not iterable(對(duì)象不可被迭代)
具體的解決方法可以結(jié)合下圖:
一句話總結(jié):為了避免類型錯(cuò)誤,你需要確定自己使用的數(shù)據(jù)類型是什么(可以借助 type()),需要進(jìn)行的操作是什么,從而去確認(rèn)是否需要使用函數(shù)來(lái)進(jìn)行類型轉(zhuǎn)換。
第二種異常是IndexError ,這個(gè)異常,和列表取值有關(guān)。 出現(xiàn)頻率較高的索引錯(cuò)誤是 IndexError: list index out of range(索引超出了范圍),在列表中使用索引取值時(shí),一定要確保索引在正確的范圍區(qū)間內(nèi)。
最后,我們講了幾種操作文件過(guò)程中的常見(jiàn)異常。第一種是 ModuleNotFoundError 未找到模塊錯(cuò)誤,是一種有關(guān)模塊的異常,解決這個(gè)異常的方法十分簡(jiǎn)單,只要你在導(dǎo)入模塊時(shí)仔細(xì)檢查模塊的拼寫(xiě)是否正確即可。
第二種是 AttributeError 屬性錯(cuò)誤 ,為了避免這種異常,我們?cè)谑褂媚K中的方法時(shí),需要先檢查拼寫(xiě)是否正確,確認(rèn)拼寫(xiě)無(wú)誤后,再檢查模塊或庫(kù)中是否存在該方法或?qū)傩浴?/p>
第三種是 FileNotFoundError 文件找不到的錯(cuò)誤,為了避免這種異常,我們需要按照路徑找到對(duì)應(yīng)的文件或文件夾,檢查文件或文件夾名是否正確。
最后一種是 UnicodeDecodeError 即編碼解碼錯(cuò)誤,它也是 open() 函數(shù)的另一個(gè)參數(shù) encoding 會(huì)引發(fā)的異常,之前課程講的寫(xiě)法是 encoding = 'utf-8',這是因?yàn)?,大部分工作?chǎng)景的文件編碼格式都是 'utf-8'。但如果你需要使用別人分享的代碼時(shí),很有可能會(huì)因?yàn)槟銈冎g使用了不同的編碼格式而引發(fā)異常。
以后遇到這樣的異常,有兩種解決方法:
第一種,先利用 VSCode 等軟件去查看文件的編碼格式,然后再將文件的編碼格式修改為你在代碼中寫(xiě)的編碼格式即可。
第二種,還是先在 VSCode 里面查看文件的編碼格式,然后將代碼中的 encoding 參數(shù)改為該文件的編碼格式即可。
總結(jié)如下:
而實(shí)際上我們?cè)趯?xiě)代碼的過(guò)程中可能遇到的錯(cuò)誤遠(yuǎn)不止這些,課程也無(wú)法一一全部講到,所以大家需要培養(yǎng)的是這種自己發(fā)現(xiàn)錯(cuò)誤和解決錯(cuò)誤的能力,這就需要我們不斷的嘗試以及學(xué)會(huì)到百度上搜索查閱資料來(lái)積累經(jīng)驗(yàn)了。
到此這篇關(guān)于Python中如何處理常見(jiàn)報(bào)錯(cuò)的文章就介紹到這了,更多相關(guān)Python處理報(bào)錯(cuò)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
對(duì)Python3中的print函數(shù)以及與python2的對(duì)比分析
下面小編就為大家分享一篇對(duì)Python3中的print函數(shù)以及與python2的對(duì)比分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05pycharm中如何自定義設(shè)置通過(guò)“ctrl+滾輪”進(jìn)行放大和縮小實(shí)現(xiàn)方法
這篇文章主要介紹了pycharm中如何自定義設(shè)置通過(guò)“ctrl+滾輪”進(jìn)行放大和縮小實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09Python爬蟲(chóng)之使用MongoDB存儲(chǔ)數(shù)據(jù)的實(shí)現(xiàn)
本文主要介紹了Python爬蟲(chóng)之使用MongoDB存儲(chǔ)數(shù)據(jù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06Python操作mysql數(shù)據(jù)庫(kù)實(shí)現(xiàn)增刪查改功能的方法
這篇文章主要介紹了Python操作mysql數(shù)據(jù)庫(kù)實(shí)現(xiàn)增刪查改功能的方法,涉及Python針對(duì)mysql數(shù)據(jù)庫(kù)的連接、增刪改查等相關(guān)操作技巧,需要的朋友可以參考下2018-01-01python的paramiko模塊實(shí)現(xiàn)遠(yuǎn)程控制和傳輸示例
本篇文章主要介紹了python的paramiko模塊實(shí)現(xiàn)遠(yuǎn)程控制和傳輸示例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-10-10用Python編寫(xiě)生成樹(shù)狀結(jié)構(gòu)的文件目錄的腳本的教程
這篇文章主要介紹了用Python編寫(xiě)生成樹(shù)狀結(jié)構(gòu)的文件目錄的腳本的教程,是一個(gè)利用os模塊下各函數(shù)的簡(jiǎn)單實(shí)現(xiàn),需要的朋友可以參考下2015-05-05