在python中,乙個異常分為三部分:
1:異常的追蹤資訊
2:異常的型別
3:異常的值
#語法錯誤示範一if#語法錯誤示範二
def test:
pass
#語法錯誤示範三
class
foo pass
#語法錯誤示範四
print(haha
# typeerror int型別不可迭代for i in3:
pass
# valueerror 值錯誤
num = input('
>>:')
int(num)
# nameerror 名字錯誤
aaa# indexerror 索引錯誤
l=['
egon
','aaa']
l[3]# keyerror 字典的值錯誤
dic=
dic[
'age']
# attributeerror 屬性錯誤
class
foo :
pass
foo.x
#zerodivisionerror:無法完成計算
res1=1/0
res1=1+'
shr'
# filenotfounderror 檔案路徑異常 找不到該檔案f=open('a.txt','r',encoding='utf-8')
attributeerror 檢視訪問乙個物件沒有的樹形, 比如 foo.x , 但是foo沒有屬性x。ioerror輸入/輸出異常,基本上是無法開啟檔案。
importerror 無法引入模組或包,基本上是路徑問題或名稱問題。
indentionerror 語法錯誤(的子類);**沒有正確對齊
indexerror 下標索引超出序列邊界,比如當x只有三個元素,卻檢視訪問x[5].
keyerror 試圖訪問字典裡不存在的鍵
keyboardinterrupt ctrl+c 被按下
nameerror 使用乙個還未被賦予物件的變數
syntaxerror python **非法,**不能編譯(語法錯誤)
typeerror 傳入物件型別與要求的不符合
unboudlocalerror 試圖訪問乙個還未被設定的區域性變數, 基本上是 由於有乙個同名的全域性變數,導致你以為正在訪問它
valueerror 傳入乙個呼叫者不期望的值,即使值得型別是正確的
age=10while
true:
age=input('
>>:
').strip()
ifage.isdigit(): #只有在age為字串形式的整數時,下列**才不會出錯,該條件是可預知的
age=int
(age)
if age ==age:
print(
'you got it')
break
基本語法為try:
被檢測的**塊
except 異常型別:
try中一旦檢測到異常,就執行這個位置的邏輯
舉例:try
:f=open('
a.txt)
g=(line.strip() for line in
f)print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
except stopiteration
f.close()
#1.單分支
s1 = '
hello
'try
:
int(s1)
except indexerror
ase:# 未捕獲異常, 程式直接報錯
print(e)
# 2多分支s1 ='
hello
'try
:
int(s1)
except indexerror
ase:
print(e)
except keyerror
ase: # 可以跟多個except
print(e)
except valueerror
ase:
print(e)
# 3萬能異常 exception
s1='
hello
'try
:
int(s1)
except exception
ase: #r任何異常都可以接受然後將這個異常命名為e, 下面列印出來
print(e)#4
多分支異常與萬能異常
#4.1
如果你想要的效果是,無論出現什麼異常,我們統一丟棄,或者使用同一段**邏輯去處理他們,那麼騷年,大膽的去做吧,只有乙個exception就足夠了。
#4.2
如果你想要的效果是,對於不同的異常我們需要定製不同的處理邏輯,那就需要用到多分支了。#5
也可以在多分支後來乙個exception
s1 = '
hello
'try
:
int(s1)
except indexerror
ase:
print(e)
except keyerror
ase:
print(e)
except valueerror
ase:
print(e)
except exception
ase:
print(e)
#6異常的其他機構
6.1except 下面還可以個else,else一定要與except連用
s1 = '
hello
'try
:
int(s1)
except indexerror
ase:
print(e)
except keyerror
ase:
print(e)
except valueerror
ase:
print(e)
#except exception
ase:
# print(e)
else
: print(
'try內**塊沒有異常則執行我')
#6.2
try :....finally
... 最後總結無論怎樣
s1 = '
hello
'try
:
int(s1)
except indexerror
ase:
print(e)
except keyerror
ase:
print(e)
except valueerror
ase:
print(e)
#except exception
ase:
# print(e)
else
: print(
'try內**塊沒有異常則執行我')
finally
: print(
'無論異常與否,都會執行該模組,通常是進行清理工作')
7:主動觸發異常 raise
raise typeerror 型別錯誤
class
people:
def __init__(self,name):
ifnot isinstance(name,str):
raise typeerror(
'%s 必須是str型別』 %name
self.name=name
p=people(123
)#呼叫結果 typeerror:
123必須是str型別
8斷言 assert 斷定某個條件成立 然後在取執行下面的條件
stus=['
egon
','alex
','wxx
','lxx']
assert len(stus) > 0
#斷定 stus 的長度成立的情況下就執行下面的 **
print(
'part2.........')
print(
'part2.........')
#列印結果
part2.........
part2.........
9:自定義異常
class
registererror(baseexception):
def __init__(self,msg,user):
self.msg=msg
self.user=user
def __str__(self):
return
'' %(self.user,self.msg)
raise registererror(
'註冊失敗
','teacher
')
python異常處理 Python 異常處理
使用者輸入不完整 比如輸入為空 或者輸入非法 輸入不是數字 異常就是程式執行時發生錯誤的訊號,在python中,錯誤觸發的異常如下 在python中不同的異常可以用不同的型別 python中統一了類與型別,型別即類 去標識,不同的類物件標識不同的異常,乙個異常標識一種錯 觸發indexerror 觸...
python異常舉例 Python異常處理
1.1異常問題舉例 例一 i input 請輸入數字 請輸入數字 0 print i print 5 int i traceback most recent call last file line 1,in zerodivisionerror division by zero 上述 的報錯是除零的錯...
python異常處理
當你的程式中出現異常情況時就需要異常處理。比如當你開啟乙個不存在的檔案時。當你的程式中有一些無效的語句時,python會提示你有錯誤存在。下面是乙個拼寫錯誤的例子,print寫成了print。python是大小寫敏感的,因此python將引發乙個錯誤 print hello world file l...