本人只是初學(xué)階段,在學(xué)習(xí)過(guò)程中的一些筆記。想借此平臺(tái)也分享給剛剛學(xué)習(xí)的朋友,如有錯(cuò)的地方歡迎各位大神與高手指點(diǎn)。
Python編碼中try語(yǔ)法是用來(lái)捕獲由Python或程序本身引發(fā)的異常,如果不想在異常發(fā)生時(shí)結(jié)束程序,只需在try里捕獲它。
方法一:如果只用try except? 拋出異常后將結(jié)束程序運(yùn)行
方法二:如果只用try except?finally拋出異常后程序會(huì)繼續(xù)運(yùn)行,如下例:
例子一:
import re
def?collatz(number):
? ? ? ? try:
? ? ? ? ? ? number =?int(number)
? ? ? ? ? ? if?number %?2?==?0:
? ? ? ? ? ? ? ? return?number //?2
? ? ? ? ? ? elif?number %?2?==?1:
? ? ? ? ? ? ? ? return?3?* number +?1
? ? ? ? except?ValueError:
? ? ? ? ? ?global?re
? ? ? ? ? ?re =?'類型錯(cuò)誤'
? ? ? ? ? ?print(re)
? ? ? ? ? ?return?''
? ? ? ?finally:
? ? ? ? ? ?print('我是在拋出{0}異常后,繼續(xù)運(yùn)行的程序塊!'.format(re))
for?i?in?range(1,?8):
? ? num =?input('請(qǐng)輸入數(shù)字:')
? ? print(collatz(num))
? ? print('你已經(jīng)輸入了{(lán)0}次,還剩{1}次!'.format(i,?7?- i))
例子二:
try:
? ? ? f =open('users1.txt')# 前提是有這個(gè)txt文件,如果沒(méi)有此文件的話直接會(huì)到except處提示錯(cuò)誤,且finally也會(huì)報(bào)錯(cuò)
except IOError:
? ? ? print('IO錯(cuò)誤,讀寫(xiě)異常??!')
else:# 如果真的打開(kāi)了txt文件,即會(huì)列表文件內(nèi)容
? ? ? data = f.read().splitlines()
? ? ? print(data)
finally:
? ? ? f.close()
例子三:
a =5 # 賦值給變量a
try:
????print(int(10 / a))# 如果沒(méi)有上面的賦值,運(yùn)行時(shí)報(bào)錯(cuò)NameError: name 'a' is not defined的
? ? print(10 /2)# 如果前面沒(méi)有加int整型的話結(jié)果是5.0,加了int的話結(jié)果是5
? ? print(10 /3)# 同上
# except 代表捕捉
except NameError:# 上面沒(méi)有a=10的賦值行為的話,運(yùn)行時(shí)后會(huì)提示print中的提示語(yǔ),不會(huì)提示NameError: name 'a' is not defined
? ? print("未聲明/初始化對(duì)象(沒(méi)有屬性)")
except SyntaxError:# 同理如果語(yǔ)法有錯(cuò)誤的話就會(huì)提示這句
? ? print("Python語(yǔ)法錯(cuò)誤?。?)
except IOError:# IO提示錯(cuò)誤,多數(shù)情況是讀取文件不存在
? ? print('IO錯(cuò)誤,讀寫(xiě)異常?。?)
except IndentationError:# 縮進(jìn)錯(cuò)誤
? ? print('縮進(jìn)錯(cuò)誤!')
except ImportError:# 模塊錯(cuò)誤
? ? print('模塊導(dǎo)入錯(cuò)誤或?qū)肽K??!')
except Exception:# 以上錯(cuò)誤都不是時(shí)就會(huì)提示這個(gè)異常
? ? print('萬(wàn)能異常!')
else:# 當(dāng)程序正常運(yùn)行時(shí)即提示成功,當(dāng)然也可以將此步忽略
? ? print('程序運(yùn)行正常??!')
以下是常見(jiàn)的異常
AttributeError 試圖訪問(wèn)一個(gè)對(duì)象沒(méi)有的屬性,比如foo.x,但是foo沒(méi)有屬性x
IOError 輸入/輸出異常;基本上是無(wú)法打開(kāi)文件
ImportError 無(wú)法引入模塊或包;基本上是路徑問(wèn)題或名稱錯(cuò)誤
IndentationError 語(yǔ)法錯(cuò)誤(的子類) ;代碼沒(méi)有正確對(duì)齊
IndexError 下標(biāo)索引超出序列邊界,比如當(dāng)x只有三個(gè)元素,卻試圖訪問(wèn)x[5]
KeyError 試圖訪問(wèn)字典里不存在的鍵
KeyboardInterrupt Ctrl+C被按下
NameError 嘗試訪問(wèn)一個(gè)沒(méi)有申明的變量
SyntaxError Python代碼非法,代碼不能編譯(個(gè)人認(rèn)為這是語(yǔ)法錯(cuò)誤,寫(xiě)錯(cuò)了)
TypeError 傳入對(duì)象類型與要求的不符合
UnboundLocalError 試圖訪問(wèn)一個(gè)還未被設(shè)置的局部變量,基本上是由于另有一個(gè)同名的全局變量,導(dǎo)致你以為正在訪問(wèn)它
ValueError 傳入一個(gè)調(diào)用者不期望的值,即使值的類型是正確的
BaseException??? 所有異常的基類
SystemExit??? 解釋器請(qǐng)求退出
KeyboardInterrupt??? 用戶中斷執(zhí)行(通常是輸入^C)
Exception??? 常規(guī)錯(cuò)誤的基類
StopIteration??? 迭代器沒(méi)有更多的值
GeneratorExit??? 生成器(generator)發(fā)生異常來(lái)通知退出
StandardError??? 所有的內(nèi)建標(biāo)準(zhǔn)異常的基類
ArithmeticError??? 所有數(shù)值計(jì)算錯(cuò)誤的基類
FloatingPointError??? 浮點(diǎn)計(jì)算錯(cuò)誤
OverflowError??? 數(shù)值運(yùn)算超出最大限制
ZeroDivisionError??? 除(或取模)零 (所有數(shù)據(jù)類型)
AssertionError??? 斷言語(yǔ)句失敗
AttributeError??? 對(duì)象沒(méi)有這個(gè)屬性
EOFError??? 沒(méi)有內(nèi)建輸入,到達(dá)EOF 標(biāo)記
EnvironmentError??? 操作系統(tǒng)錯(cuò)誤的基類
IOError??? 輸入/輸出操作失敗
OSError??? 操作系統(tǒng)錯(cuò)誤
WindowsError??? 系統(tǒng)調(diào)用失敗
ImportError??? 導(dǎo)入模塊/對(duì)象失敗
LookupError??? 無(wú)效數(shù)據(jù)查詢的基類
IndexError??? 序列中沒(méi)有此索引(index)
KeyError??? 映射中沒(méi)有這個(gè)鍵
MemoryError??? 內(nèi)存溢出錯(cuò)誤(對(duì)于Python 解釋器不是致命的)
NameError??? 未聲明/初始化對(duì)象 (沒(méi)有屬性)
UnboundLocalError??? 訪問(wèn)未初始化的本地變量
ReferenceError??? 弱引用(Weak reference)試圖訪問(wèn)已經(jīng)垃圾回收了的對(duì)象
RuntimeError??? 一般的運(yùn)行時(shí)錯(cuò)誤
NotImplementedError??? 尚未實(shí)現(xiàn)的方法
SyntaxError??? Python 語(yǔ)法錯(cuò)誤
IndentationError??? 縮進(jìn)錯(cuò)誤
TabError??? Tab 和空格混用
SystemError??? 一般的解釋器系統(tǒng)錯(cuò)誤
TypeError??? 對(duì)類型無(wú)效的操作
ValueError??? 傳入無(wú)效的參數(shù)
UnicodeError??? Unicode 相關(guān)的錯(cuò)誤
UnicodeDecodeError??? Unicode 解碼時(shí)的錯(cuò)誤
UnicodeEncodeError??? Unicode 編碼時(shí)錯(cuò)誤
UnicodeTranslateError??? Unicode 轉(zhuǎn)換時(shí)錯(cuò)誤
Warning??? 警告的基類
DeprecationWarning??? 關(guān)于被棄用的特征的警告
FutureWarning??? 關(guān)于構(gòu)造將來(lái)語(yǔ)義會(huì)有改變的警告
OverflowWarning??? 舊的關(guān)于自動(dòng)提升為長(zhǎng)整型(long)的警告
PendingDeprecationWarning??? 關(guān)于特性將會(huì)被廢棄的警告
RuntimeWarning??? 可疑的運(yùn)行時(shí)行為(runtime behavior)的警告
SyntaxWarning??? 可疑的語(yǔ)法的警告
UserWarning??? 用戶代碼生成的警告