python異常處理

2022-02-02 01:35:25 字數 3575 閱讀 6223

(1) 異常處理

#沒有異常處理

num = int('abc')

print(num) #報錯

#異常處理

try:

num = int('abc') #try裡的**是受保護的

print(num)

except exception as e:

print(e) #輸出invalid literal for int() with base 10: 'abc',程式正常執行

e是由exception類例項化的乙個物件

class exception(baseexception):

""" common base class for all non-exit exceptions. """

def __init__(self, *args, **kwargs): # real signature unknown

pass

@staticmethod # known case of __new__

def __new__(*args, **kwargs): # real signature unknown

""" create and return a new object. see help(type) for accurate signature. """

pass

(2) 異常分類

exception是萬能的異常捕捉方法,可以捕捉到任何錯誤。

li = 

inp = input('請輸入內容:')

try:

li =

li[999]

except indexerror as e: # 特殊異常需要優先匹配

print('索引錯誤')

except exception as e:

print(e)

常見異常

attributeerror

試圖訪問乙個物件沒有的樹形,比如foo.x,但是foo沒有屬性x

ioerror

輸入/輸出異常;基本上是無法開啟檔案

importerror

無法引入模組或包;基本上是路徑問題或名稱錯誤

indentationerror

語法錯誤(的子類) ;**沒有正確對齊

indexerror

下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]

keyerror

試圖訪問字典裡不存在的鍵

keyboardinterrupt

ctrl+c被按下

nameerror

使用乙個還未被賦予物件的變數

syntaxerror

python**非法,**不能編譯(個人認為這是語法錯誤,寫錯了)

typeerror

傳入物件型別與要求的不符合

unboundlocalerror

試圖訪問乙個還未被設定的區域性變數,基本上是由於另有乙個同名的全域性變數,導致你以為正在訪問它

valueerror

傳入乙個呼叫者不期望的值,即使值的型別是正確的

python的錯誤其實也是class,所有的錯誤型別都繼承自baseexception,所以在使用except時需要注意的是,它不但捕獲該型別的錯誤,還把其子類也「一網打盡」。比如:

try:

foo()

except valueerror as e:

print('valueerror')

except unicodeerror as e:

print('unicodeerror')

第二個except永遠也捕獲不到unicodeerror,因為unicodeerror是valueerror的子類,如果有,也被第乙個except給捕獲了。

python所有的錯誤都是從baseexception類派生的,常見的錯誤型別和繼承關係看這裡:

使用try...except捕獲錯誤還有乙個巨大的好處,就是可以跨越多層呼叫,比如函式main()呼叫foo(),foo()呼叫bar(),結果bar()出錯了,這時,只要main()捕獲到了,就可以處理:

def foo(s):

return 10 / int(s)

def bar(s):

return foo(s) * 2

def main():

try:

bar('0')

except exception as e:

print('error:', e)

finally:

print('finally...')

也就是說,不需要在每個可能出錯的地方去捕獲錯誤,只要在合適的層次去捕獲錯誤就可以了。這樣一來,就大大減少了寫try...except...finally的麻煩。

(3) 異常例項

#indexerror

dic = ["wupeiqi", 'alex']

try:

dic[10]

except indexerror, e:

print e

#keyerror

dic =

try:

dic['k20']

except keyerror, e:

print e

#valueerror

s1 = 'hello'

try:

int(s1)

except valueerror, e:

print e

(4) 異常的結構

完整的基本結構如下

try:

# 主**塊

pass

except keyerror as e:

# 異常時,執行該塊

pass

else:

# 主**塊執行完,執行該塊

pass

finally:

# 無論異常與否,最終執行該塊

pass

(5) 主動觸發異常
try:

raise exception('錯誤了。。。')

except exception as e:

print e

(6) 自定義異常
class wupeiqiexception(exception):

def __init__(self, msg):

self.message = msg

def __str__(self):

return self.message

try:

raise wupeiqiexception('我的異常')

except wupeiqiexception,e:

print e

(7) 斷言
# assert 條件

assert 1 == 1 #條件成立程式正常執行

assert 1 == 2 #不成裡就會報錯,程式就異常

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