一、異常和錯誤
1、語法錯誤(這種錯誤,根本過不了python解釋器的語法檢測,必須在程序執行前就改正)
#語法錯誤示範一
if
#語法錯誤示範二
def test:
pass
#語法錯誤示範三
print(haha
2、邏輯錯誤
#用戶輸入不完整(比如輸入爲空)或者輸入非法(輸入不是數字)
num=input(">>: ")
int(num)
#無法完成計算
res1=1/0
res2=1+'str'
3、什麼是異常?
異常就是程序運行時發生錯誤的信號,在python中,錯誤觸發的異常如下
4、python中的異常種類
常用異常
錯誤類 | 錯誤描述 |
---|---|
IOError | 輸入/輸出異常;基本上是無法打開文件 |
AttributeError | 試圖訪問一個對象沒有的樹形,比如foo.x,但是foo沒有屬性x |
ImportError | 無法引入模塊或包;基本上是路徑問題或名稱錯誤 |
IndentationError | 語法錯誤(的子類) ;代碼沒有正確對齊 |
IndexError | 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5] |
KeyError | 試圖訪問字典裏不存在的鍵 |
KeyboardInterrupt | Ctrl+C被按下 |
NameError | 使用一個還未被賦予對象的變量 |
SyntaxError | Python代碼非法,代碼不能編譯(個人認爲這是語法錯誤,寫錯了) |
TypeError | 傳入對象類型與要求的不符合 |
UnboundLocalError | 試圖訪問一個還未被設置的局部變量,基本上是由於另有一個同名的全局變量,導致你以爲正在訪問它 |
ValueError | 傳入一個調用者不期望的值,即使值的類型是正確的 |
更多異常
錯誤類 |
---|
ArithmeticError |
AssertionError |
AttributeError |
BaseException |
BufferError |
BytesWarning |
DeprecationWarning |
EnvironmentError |
EOFError |
Exception |
FloatingPointError |
FutureWarning |
GeneratorExit |
ImportError |
ImportWarning |
IndentationError |
IndexError |
IOError |
KeyboardInterrupt |
KeyError |
LookupError |
MemoryError |
NameError |
NotImplementedError |
OSError |
OverflowError |
PendingDeprecationWarning |
ReferenceError |
RuntimeError |
RuntimeWarning |
StandardError |
StopIteration |
SyntaxError |
SyntaxWarning |
SystemError |
SystemExit |
TabError |
TypeError |
UnboundLocalError |
UnicodeDecodeError |
UnicodeEncodeError |
UnicodeError |
UnicodeTranslateError |
UnicodeWarning |
UserWarning |
ValueError |
Warning |
ZeroDivisionError |
二、異常處理
1、基本語法
try:
被檢測的代碼塊
except 異常類型:
try中一旦檢測到異常,就執行這個位置的邏輯
f = open('b.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()
next(g)會觸發迭代f,依次next(g)就可以讀取文件的一行行內容,無論文件a.txt有多大,同一時刻內存中只有一行內容。
提示:g是基於文件句柄f而存在的,因而只能在next(g)拋出異常StopIteration後纔可以執行f.close()
2、異常類只能用來處理指定的異常情況,如果非指定異常則無法處理。
# 未捕獲到異常,程序直接報錯
s1 = 'hahaha'
try:
int(s1)
except IndexError as e:
print(e)
3、多分支異常處理
s1 = 'hahaha'
try:
int(s1)
except IndexError as e:
print(e)
except KeyError as e:
print(e)
except ValueError as e:
print(e)
4、萬能異常 在python的異常中,有一個萬能異常:Exception,他可以捕獲任意異常
s1 = 'hahaha'
try:
int(s1)
except Exception as e:
print(e)
5、異常的其他機構
s1 = 'hahaha'
try:
int(s1)
except IndexError as e:
print(e)
except KeyError as e:
print(e)
except ValueError as e:
print(e)
#except Exception as e:
# print(e)
else:
print('try內代碼塊沒有異常則執行我')
finally:
print('無論異常與否,都會執行該模塊')
6、主動觸發異常
try:
raise TypeError('類型錯誤')
except Exception as e:
print(e)