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