python 異常處理

2022-05-06 21:45:10 字數 4899 閱讀 5674

在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=10

while

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...