电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

新手常見(jiàn)Python錯(cuò)誤及異常解決處理方案

瀏覽:105日期:2022-07-20 15:18:31

寫Python代碼的小伙伴不可避免地會(huì)遇到代碼執(zhí)行錯(cuò)誤和異常,這次就來(lái)詳細(xì)且不失通俗地總結(jié)一下python中的錯(cuò)誤和異常。

先拋出兩個(gè)問(wèn)題:

什么是Python錯(cuò)誤和異常?

如何處理Python錯(cuò)誤和異常?

1.語(yǔ)法錯(cuò)誤可能是初學(xué)者最常遇到的,如下面熟悉的畫面:

SyntaxError: invalid syntax語(yǔ)法錯(cuò)誤又稱解析錯(cuò)誤,又有老哥會(huì)問(wèn)什么是解析錯(cuò)誤?簡(jiǎn)單來(lái)說(shuō)是基本語(yǔ)法結(jié)構(gòu)寫錯(cuò)了,如:多任務(wù)寫成一行、for循環(huán)沒(méi)加‘:’等。如下:

新手常見(jiàn)Python錯(cuò)誤及異常解決處理方案

多任務(wù)寫成一行

新手常見(jiàn)Python錯(cuò)誤及異常解決處理方案

for循環(huán)沒(méi)加‘:’

上面示例可以看到,針對(duì)語(yǔ)法錯(cuò)誤,python解析器會(huì)輸出錯(cuò)誤的那一行,并且在最先找到的錯(cuò)誤的位置標(biāo)記了一個(gè)箭頭。

 熟悉python語(yǔ)法后,可以避免語(yǔ)法錯(cuò)誤,但是代碼常會(huì)發(fā)生異常(Exception)。還是兩個(gè)問(wèn)題:

2.異常是什么?

 異常和語(yǔ)法錯(cuò)誤有什么區(qū)別呢?

關(guān)于異常,舉個(gè)例子:

這行代碼出現(xiàn)異常,因?yàn)镻rint的p應(yīng)該小寫:

新手常見(jiàn)Python錯(cuò)誤及異常解決處理方案

python拋出異常類型:NameError,即名字錯(cuò)誤。

其它異常的例子:

新手常見(jiàn)Python錯(cuò)誤及異常解決處理方案

可以看到,異常有不同的類型,發(fā)生異常后,其類型名稱會(huì)被打印出來(lái)。上述這些都是python內(nèi)置的異常,用戶也可以自定義異常,這里不做贅述。

3、try...except...語(yǔ)句

有python編程經(jīng)驗(yàn)的人會(huì)知道,python里用try...except...語(yǔ)句來(lái)處理異常情況。

先看個(gè)異常處理的示例:

新手常見(jiàn)Python錯(cuò)誤及異常解決處理方案

看,我們完美地捕捉到了程序中的異常。

結(jié)合上面的示例,處理異常的規(guī)則是:把執(zhí)行的語(yǔ)句放在 try 代碼塊中,將錯(cuò)誤處理器代碼放置在 except 代碼塊中,except會(huì)引發(fā)ZeroDivisionError異常來(lái)提醒Coder,這段代碼的錯(cuò)誤是零不能作為被除數(shù)。

except后面也可以不添加異常類型,會(huì)捕獲所有出現(xiàn)的異常:

新手常見(jiàn)Python錯(cuò)誤及異常解決處理方案

我們可以把try...except...原理歸納為幾個(gè)要點(diǎn):

首先,執(zhí)行 try 子句 (try 和 except 關(guān)鍵字之間的(多行)語(yǔ)句) 如果沒(méi)有異常發(fā)生,則跳過(guò) except 子句 并完成 try 語(yǔ)句的執(zhí)行 如果在執(zhí)行try 子句時(shí)發(fā)生了異常,則跳過(guò)該子句中剩下的部分。然后,如果異常的類型和 except 關(guān)鍵字后面的異常匹配,則執(zhí)行 except 子句 ,然后繼續(xù)執(zhí)行 try 語(yǔ)句之后的代碼

如果發(fā)生的異常和 except 子句中指定的異常不匹配,則將其傳遞到外部的 try 語(yǔ)句中;如果沒(méi)有找到處理程序,則它是一個(gè)未處理異常,執(zhí)行將停止并顯示如上所示的消息

4、多個(gè)except子句

上面的try...except...語(yǔ)句只處理了一種異常,如果我想多匹配幾個(gè)異常類型,怎么辦呢?

這里就需要多個(gè)except子句來(lái)幫忙了,舉個(gè)例子:

新手常見(jiàn)Python錯(cuò)誤及異常解決處理方案

引發(fā)異常ZeroDivisionError

新手常見(jiàn)Python錯(cuò)誤及異常解決處理方案

引發(fā)異常TypeError

上面我們用了兩個(gè)except,匹配ZeroDivisionError和TypeError這兩種異常,第一個(gè)代碼捕捉到了ZeroDivisionError,第二段代碼捕捉到了TypeError異常,一個(gè)都沒(méi)有漏。當(dāng)然你還可以這樣寫:

新手常見(jiàn)Python錯(cuò)誤及異常解決處理方案

也就是用一個(gè)except捕捉多個(gè)異常,異常類型放到except后面的元組里。

綜上,對(duì)于多個(gè)except子句,可以總結(jié)為:

一個(gè)try語(yǔ)句可能有多個(gè) except 子句,以指定不同異常的處理程序

最多會(huì)執(zhí)行一個(gè)處理程序

處理程序只處理相應(yīng)的 try 子句中發(fā)生的異常,而不處理同一try語(yǔ)句內(nèi)其他處理程序中的異常

一個(gè) except 子句可以將多個(gè)異常命名為帶括號(hào)的元組

5、try...except Exception as e語(yǔ)句

我們常常會(huì)看看這樣的寫法:

try...exceptException as e其中的e代表什么意思呢?

再舉個(gè)例子:

新手常見(jiàn)Python錯(cuò)誤及異常解決處理方案

通過(guò)示例可以知道,e輸出了異常類型。也就是說(shuō),Exception匹配了所有異常,把異常名稱賦給了e。

當(dāng)然這里不一定非得是e,你可以取任何的變量名,只是約定俗稱這樣寫罷了。

6、try...except...finally語(yǔ)句

try...except...finally語(yǔ)句可能并不那么常見(jiàn),但它是非常有用的。

如果說(shuō),我想用python打開(kāi)了一個(gè)txt文件,然后讀取,寫入,最后關(guān)閉文件對(duì)象。這是一套常規(guī)流程,如果我想捕捉代碼過(guò)程中的異常,又要保證無(wú)論是否有異常,最后都必須要關(guān)閉文件。這時(shí)候就用到finally,看下面例子:

新手常見(jiàn)Python錯(cuò)誤及異常解決處理方案

上面代碼,既捕捉到了異常,最終又關(guān)閉了文件對(duì)象。

finaly的作用是,無(wú)論except是否捕捉到異常,

finally后面的代碼都會(huì)執(zhí)行,try獲取了資源,

finally釋放資源,保證了收尾工作。

7、with...語(yǔ)句

with...語(yǔ)句是try-finally語(yǔ)句的簡(jiǎn)寫,可以替代try-finally的功能。

新手常見(jiàn)Python錯(cuò)誤及異常解決處理方案

表達(dá)式open(’poem.txt’)返回是一個(gè)_io.TextIOWrapper 類型的變量賦給f。

在with語(yǔ)句塊中就可以使用這個(gè)變量操作文件。

執(zhí)行with這個(gè)結(jié)構(gòu)之后,f會(huì)自動(dòng)關(guān)閉,相當(dāng)于自帶了一個(gè)finally。

8、總結(jié)

本文詳細(xì)且清晰地講解了Python中錯(cuò)誤和異常的概念及其處理方式,

通過(guò)具體案例展示try...except、try...finally、with...等句式的具體用法,

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 板材品牌-中国胶合板行业十大品牌-环保板材-上海声达板材 | 排烟防火阀-消防排烟风机-正压送风口-厂家-价格-哪家好-德州鑫港旺通风设备有限公司 | 纳米涂料品牌 防雾抗污纳米陶瓷涂料厂家_虹瓷科技 | 超细|超微气流粉碎机|气流磨|气流分级机|粉体改性机|磨粉机|粉碎设备-山东埃尔派粉体科技 | GAST/BRIWATEC/CINCINNATI/KARL-KLEIN/ZIEHL-ABEGG风机|亚喜科技 | 刮板输送机,粉尘加湿搅拌机,螺旋输送机,布袋除尘器 | 上海风淋室_上海风淋室厂家_上海风淋室价格_上海伯淋 | 减速机三参数组合探头|TSM803|壁挂式氧化锆分析仪探头-安徽鹏宸电气有限公司 | FAG轴承,苏州FAG轴承,德国FAG轴承-恩梯必传动设备(苏州)有限公司 | 洗石机-移动滚筒式,振动,螺旋,洗矿机-青州冠诚重工机械有限公司 | 校车_校车价格_19座幼儿园校车_幼儿园校车_大鼻子校车 | 二氧化碳/活性炭投加系统,次氯酸钠发生器,紫外线消毒设备|广州新奥 | 自清洗过滤器_全自动过滤器_全自动反冲洗过滤器_量子过滤器-滑漮滴 | 注塑模具_塑料模具_塑胶模具_范仕达【官网】_东莞模具设计与制造加工厂家 | 可程式恒温恒湿试验箱|恒温恒湿箱|恒温恒湿试验箱|恒温恒湿老化试验箱|高低温试验箱价格报价-广东德瑞检测设备有限公司 | 西安标准厂房_陕西工业厂房_西咸新区独栋厂房_长信科技产业园官方网站 | 土壤有机碳消解器-石油|表层油类分析采水器-青岛溯源环保设备有限公司 | 检验科改造施工_DSA手术室净化_导管室装修_成都特殊科室建设厂家_医疗净化工程公司_四川华锐 | 湖南成人高考报名-湖南成考网 | 讲师宝经纪-专业培训机构师资供应商_培训机构找讲师、培训师、讲师经纪就上讲师宝经纪 | 深圳成考网-深圳成人高考报名网 深圳工程师职称评定条件及流程_深圳职称评审_职称评审-职称网 | 合肥白癜风医院_合肥治疗白癜风医院_合肥看白癜风医院哪家好_合肥华研白癜风医院 | 内窥镜-工业内窥镜厂家【上海修远仪器仪表有限公司】 | 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 | 120kv/2mA直流高压发生器-60kv/2mA-30kva/50kv工频耐压试验装置-旭明电工 | 涿州网站建设_网站设计_网站制作_做网站_固安良言多米网络公司 | 安平县鑫川金属丝网制品有限公司,防风抑尘网,单峰防风抑尘,不锈钢防风抑尘网,铝板防风抑尘网,镀铝锌防风抑尘网 | 搜木网 - 木业全产业链交易平台,免费搜货、低价买货! | 存包柜厂家_电子存包柜_超市存包柜_超市电子存包柜_自动存包柜-洛阳中星 | 磨煤机配件-高铬辊套-高铬衬板-立磨辊套-盐山县宏润电力设备有限公司 | 安全阀_弹簧式安全阀_美标安全阀_工业冷冻安全阀厂家-中国·阿司米阀门有限公司 | 自动螺旋上料机厂家价格-斗式提升机定制-螺杆绞龙输送机-杰凯上料机 | 衬氟旋塞阀-卡套旋塞阀-中升阀门首页 | 常州翔天实验仪器厂-恒温振荡器-台式恒温振荡器-微量血液离心机 恒温恒湿箱(药品/保健品/食品/半导体/细菌)-兰贝石(北京)科技有限公司 | 盘装氧量分析仪-防爆壁挂氧化锆分析仪-安徽吉帆仪表有限公司 | 小区健身器材_户外健身器材_室外健身器材_公园健身路径-沧州浩然体育器材有限公司 | 天坛家具官网 | 复合土工膜厂家|hdpe防渗土工膜|复合防渗土工布|玻璃纤维|双向塑料土工格栅-安徽路建新材料有限公司 | 气力输送设备_料封泵_仓泵_散装机_气化板_压力释放阀-河南锐驰机械设备有限公司 | 小区健身器材_户外健身器材_室外健身器材_公园健身路径-沧州浩然体育器材有限公司 | 包装盒厂家_纸盒印刷_礼品盒定制-济南恒印包装有限公司 |