python有兩種錯誤很容易辨認:語法錯誤和異常
語法錯誤
錯誤是指語法或者是邏輯上的。語法錯誤指示軟體的結構上的錯誤,導致不能被直譯器或者編譯器無正常解析或編譯
如:
>>> whiletrue:
...
print("a"
)...
break
file
"", line 3
break
^syntaxerror: invalid syntax
2.異常
異常是因程式 出現了錯誤而在正常控制流以外採取的行為。大多數的異常都不會被程式處理,都以錯誤資訊的形式展現
常見異常
nameerror #嘗試訪問乙個未宣告的變數
zerodivisionerror #除數為零
syntaxerror #python直譯器語法錯誤
indexerror #請求的索引超出序列範圍
keyerror #請求乙個不存在的字典關鍵字
ioerror #輸入/輸出錯誤
attributeerror #嘗試訪問未知的物件屬性
keyboardinterrupt #使用者中斷執行(^c)
indentationerror #縮排錯誤
typeerror #對型別無效的操作
valueerror #傳入無效的引數
deprecationwarning #關於被棄用的特徵警告
arithmeticerror #所有數值計算錯誤的基類
systemexit #直譯器請求退出
importerror #匯入模組/物件失敗
memoryerror #記憶體溢位
異常可通過try語句來檢測,任何在try語句塊裡的**都會被監測,檢查有無異常發生
try語句主要有兩種形式:try-except 和 try-finally
乙個try語句可以對應乙個或者多個except子句,但只能對應乙個finally子句,或是乙個try-execpt-finally復合語句
可以使用try-except語句檢測和處理異常,也可以新增一人可選的else子句處理沒有探測到異常的執行**。
而try-finally只允許檢測異常並做出一些必要的清除工作(無論發生錯誤與否),沒有任何異常處理的設施
try語句按照如下方式工作:
execpt基本語法
try: do something
except
exception[,reason]:
suite_for_exception_exception
如:
inp = input("num:")
try:
num =int(inp)
(num)
except
exception as e:
print("
轉換失敗
")
try except 語句還有乙個可選的else子句,如果使用這個子句,那麼必須放在所有的except子句之後.這個子句將在try子句沒有發生任何異常的時候執行。例如:
inp = input("num:")
try:
num =int(inp)
(num)
except
exception as e:
print("
轉換失敗")
else
:
print("
成功")
帶有多個except的try語句
li =inp = input("
num:")
try:
num =li[inp]
except
indexerror as i:
(i)except
exception as e:
print(e)
捕獲所有異常
exception
li =inp = input("
num:")
try:
num =li[inp]
#exception捕獲所有異常
except
exception as e:
print(e)
主動觸發異常
#主動觸發
try:
print("
123"
)
raise exception("
error...")
except
exception as e:
print(e)
使用者自定義異常
建立乙個新的exception類來擁有自己的異常。異常應該繼承自 exception 類,或者直接繼承,或者間接繼承
classfoo():
def__init__
(self,name):
self.name =name
def__str__
(self):
return
self.name
obj = foo("
test")
print(obj)
2 finally子句
finally子句是無論異常與否,是否捕捉到都會執行的一段**。語法結構
try: a
except
: b
else
: c
finally
: d
無論異常發生在a,b,c最終都會執行d
3 try-finally語句
另一種使用finally的方式finally單獨和try連用,它和try-except區別在於它不是用來捕捉異常的
它常常用來給維護一致的行為而無論異常是否發生。finally**段都將被執行
defchange_pwd(username, password):
"""使用者修改密碼
:param username: 使用者名稱
:param password: 修改後的密碼
:return: true修改成功,false修改失敗
"""file_object = open('
log'
)
try:
lines=open('
log','r'
).readlines()
for i in
range(len(lines)):
if username in
lines[i]:
test=lines[i].split('
$')[1]
lines[i]=lines[i].replace(test,password)
open(
'log
','w
').writelines(lines)
return
true
return
false
finally
: file_object.close( )
1.raise語句
raise語句對所支援的引數十分靈活,對應到語法上就是支援許多不同的格式,raise一般用法是
raise [someexception,[, args [, traceback]]]2.raise語句用法
raise exclass #觸發乙個異常,從exclass生成乙個例項(不含任何異常引數)、
raise exclass() #通過函式呼叫操作符(function calloperator:())作用於類名亂乙個新的exclass例項,同樣沒有引數
raise exclass,args #同上,但同時提供異常引數args,可以是乙個引數也可以是乙個元組
raise exclass,instance #通過例項觸發異常,如果 例項是exclass的子類例項,那麼新導演型別會是子類型別,如果 不是也會會是exclass子類,會複製生成新的exclass例項
例
try: 正常邏輯
except
"invalid level!":
觸發自定義異常
else
: 其餘**
#!/usr/bin/python
#-*- coding: utf-8 -*-
#定義函式
defmyexce( level ):
if level < 1:
raise exception("
invalid level!
", level)
#觸發異常後,後面的**就不會再執行
try:
myexec(0) //觸發異常
except
"invalid level!":
print 1
else
:
print 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...