python异常包_python异常处理与导入模块与导入包
一.什么是異常?
異常即是一個(gè)事件,該事件會(huì)在程序執(zhí)行過(guò)程中發(fā)生,影響了程序的正常執(zhí)行。
一般情況下,在Python無(wú)法正常處理程序時(shí)就會(huì)發(fā)生一個(gè)異常。
異常是Python對(duì)象,表示一個(gè)錯(cuò)誤。
當(dāng)Python腳本發(fā)生異常時(shí)我們需要捕獲處理它,否則程序會(huì)終止執(zhí)行。
注:語(yǔ)法上的錯(cuò)誤跟異常處理無(wú)關(guān),必須在程序運(yùn)行前就修正
二.異常處理
捕捉異常可以使用try/except語(yǔ)句。
try/except語(yǔ)句用來(lái)檢測(cè)try語(yǔ)句塊中的錯(cuò)誤,從而讓except語(yǔ)句捕獲異常信息并處理。
如果你不想在異常發(fā)生時(shí)結(jié)束你的程序,只需在try里捕獲它。
語(yǔ)法:
if..else...處理
num1=input('>>: ') #輸入一個(gè)字符串試試
ifnum1.isdigit():
int(num1) #我們的正統(tǒng)程序放到了這里,其余的都屬于異常處理范疇
elifnum1.isspace():
print('輸入的是空格,就執(zhí)行我這里的邏輯')
elif len(num1) ==0:
print('輸入的是空,就執(zhí)行我這里的邏輯')
else:
print('其他情情況,執(zhí)行我這里的邏輯')
1.if判斷式的異常處理只能針對(duì)某一段代碼,對(duì)于不同的代碼段的相同類(lèi)型的錯(cuò)誤你需要寫(xiě)重復(fù)的if來(lái)進(jìn)行處理。
2.在你的程序中頻繁的寫(xiě)與程序本身無(wú)關(guān),與異常處理有關(guān)的if,可讀性極其的差。
以下為簡(jiǎn)單的try....except...else的語(yǔ)法:
try:
<語(yǔ)句> #運(yùn)行別的代碼
except <名字>:
<語(yǔ)句> #如果在try部份引發(fā)了'name'異常
except <名字>,<數(shù)據(jù)>:
<語(yǔ)句> #如果引發(fā)了'name'異常,獲得附加的數(shù)據(jù)
else:
<語(yǔ)句> #如果沒(méi)有異常發(fā)生
#ry的工作原理是,當(dāng)開(kāi)始一個(gè)try語(yǔ)句后,python就在當(dāng)前程序的上下文中作標(biāo)記,這樣當(dāng)異常出現(xiàn)時(shí)就可以回到這里,try子句先執(zhí)行,接下來(lái)會(huì)發(fā)生什么依賴(lài)于執(zhí)行時(shí)是否出現(xiàn)異常。
如果當(dāng)try后的語(yǔ)句執(zhí)行時(shí)發(fā)生異常,python就跳回到try并執(zhí)行第一個(gè)匹配該異常的except子句,異常處理完畢,控制流就通過(guò)整個(gè)try語(yǔ)句(除非在處理異常時(shí)又引發(fā)新的異常)。
如果在try后的語(yǔ)句里發(fā)生了異常,卻沒(méi)有匹配的except子句,異常將被遞交到上層的try,或者到程序的最上層(這樣將結(jié)束程序,并打印缺省的出錯(cuò)信息)。
如果在try子句執(zhí)行時(shí)沒(méi)有發(fā)生異常,python將執(zhí)行else語(yǔ)句后的語(yǔ)句(如果有else的話(huà)),然后控制流通過(guò)整個(gè)try語(yǔ)句。
萬(wàn)能的異常捕捉
s1 = 'hello'
try:
int(s1)exceptException as e:print(e)
捕捉異常的幾種方式
s1 = 'hello'
try:
int(s1)exceptIndexError as e:print(e)exceptKeyError as e:print(e)exceptValueError as e:print(e)
多分支
s1 = 'hello'
try:
int(s1)exceptIndexError as e:print(e)exceptKeyError as e:print(e)exceptValueError as e:print(e)exceptException as e:print(e)
s1 = 'hello'
try:
int(s1)exceptIndexError as e:print(e)exceptKeyError as e:print(e)exceptValueError as e:print(e)#except Exception as e:#print(e)
else:print('try內(nèi)代碼塊沒(méi)有異常則執(zhí)行我')finally:print('無(wú)論異常與否,都會(huì)執(zhí)行該模塊,通常是進(jìn)行清理工作')
#_*_coding:utf-8_*_
__author__ = 'Linhaifeng'
try:raise TypeError('類(lèi)型錯(cuò)誤')exceptException as e:print(e)
#_*_coding:utf-8_*_
__author__ = 'Linhaifeng'
classEgonException(BaseException):def __init__(self,msg):
self.msg=msgdef __str__(self):returnself.msgtry:raise EgonException('類(lèi)型錯(cuò)誤')exceptEgonException as e:print(e)
使用try..except的方式1:把錯(cuò)誤處理和真正的工作分開(kāi)來(lái)2:代碼更易組織,更清晰,復(fù)雜的工作任務(wù)更容易實(shí)現(xiàn);3:毫無(wú)疑問(wèn),更安全了,不至于由于一些小的疏忽而使程序意外崩潰了;
#常見(jiàn)異常表
注:try...except應(yīng)該盡量少用,因?yàn)樗旧砭褪悄愀郊咏o你的程序的一種異常處理的邏輯,加多了會(huì)使代碼可讀性變得非常差
Python 模塊
一個(gè)模塊就是一個(gè)包含了python定義和聲明的文件,文件名就是模塊名字加上.py的后綴。如果你退出python解釋器然后重新進(jìn)入,那么你之前定義的函數(shù)或者變量都將丟失,因此我們通常將程序?qū)懙轿募幸员阌谰帽4嫦聛?lái),需要時(shí)就通過(guò)python test.py方式去執(zhí)行,此時(shí)test.py被稱(chēng)為腳本script。
隨著程序的發(fā)展,功能越來(lái)越多,為了方便管理,我們通常將程序分成一個(gè)個(gè)的文件,這樣做程序的結(jié)構(gòu)更清晰,方便管理。這時(shí)我們不僅僅可以把這些文件當(dāng)做腳本去執(zhí)行,還可以把他們當(dāng)做模塊來(lái)導(dǎo)入到其他的模塊中,實(shí)現(xiàn)了功能的重復(fù)利用
3.如何使用模塊?
import引入
注:引入同一文件多次,只執(zhí)行一次
#spam.py
print('from the spam.py')
money=1000
defread1():print('spam->read1->money',1000)defread2():print('spam->read2 calling read')
read1()defchange():globalmoney
money=0
#test.py
import spam #只在第一次導(dǎo)入時(shí)才執(zhí)行spam.py內(nèi)代碼,此處的顯式效果是只打印一次'from the spam.py',當(dāng)然其他的頂級(jí)代碼也都被執(zhí)行了,只不過(guò)沒(méi)有顯示效果.
importspamimportspamimportspam'''執(zhí)行結(jié)果:
from the spam.py'''
模塊與命名空間
總結(jié)
以上是生活随笔為你收集整理的python异常包_python异常处理与导入模块与导入包的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux进程假死的原因_一次Sprin
- 下一篇: 4j是合法python数字类型_pyth