異常處理
異常和錯誤
程序中錯誤分類
1.語法錯誤(程序執行前改正)
2.邏輯錯誤
python能解決什么問題?什么是異常?
異常就是程序運行時發生錯誤的信號
python中常見的異常種類
在python中不同的異常可以用不同的類型(python中統一了類與類型,類型即類)去標識,不同的類對象標識不同的異常,一個異常標識一種錯誤。
AttributeError # 試圖訪問一個對象沒有的樹形,比如foo.x,但是foo沒有屬性x
IOError # 輸入/輸出異常;基本上是無法打開文件
python socket編程、ImportError # 無法引入模塊或包;基本上是路徑問題或名稱錯誤
IndentationError # 語法錯誤(的子類) ;代碼沒有正確對齊
IndexError # 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]
KeyError # 試圖訪問字典里不存在的鍵
KeyboardInterrupt # Ctrl+C被按下
NameError # 使用一個還未被賦予對象的變量
python異常類型?SyntaxError # Python代碼非法,代碼不能編譯(個人認為這是語法錯誤,寫錯了)
TypeError # 傳入對象類型與要求的不符合
UnboundLocalError # 試圖訪問一個還未被設置的局部變量,基本上是由于另有一個同名的全局變量,
導致你以為正在訪問它
ValueError # 傳入一個調用者不期望的值,即使值的類型是正確的
ArithmeticError
python異常拋出?AssertionError
AttributeError
BaseException
BufferError
BytesWarning
DeprecationWarning
python異常?EnvironmentError
EOFError
Exception
FloatingPointError
FutureWarning
GeneratorExit
python eoferror?ImportError
ImportWarning
IndentationError
IndexError
IOError
KeyboardInterrupt
python異常處理的作用?KeyError
LookupError
MemoryError
NameError
NotImplementedError
OSError
python java、OverflowError
PendingDeprecationWarning
ReferenceError
RuntimeError
RuntimeWarning
StandardError
python異常處理,StopIteration
SyntaxError
SyntaxWarning
SystemError
SystemExit
TabError
python拋出異常繼續執行。TypeError
UnboundLocalError
UnicodeDecodeError
UnicodeEncodeError
UnicodeError
UnicodeTranslateError
python中的異常處理、UnicodeWarning
UserWarning
ValueError
Warning
ZeroDivisionError
異常處理
python異常處理語句、什么是異常?
異常發生之后,異常之后的代碼就不執行了
什么是異常處理?
python解釋器檢測到錯誤,觸發異常(也允許程序員自己觸發異常)
程序員編寫特定的代碼,專門用來捕捉這個異常(這段代碼與程序邏輯無關,與異常處理有關)
如果捕捉成功則進入另外一個處理分支,執行你為其定制的邏輯,使程序不會崩潰,這就是異常處理
為什么要進行異常處理?
增強你程序的魯棒性與容錯性
如何進行異常處理?
這里指的異常由程序的錯誤引起的,語法上的錯誤跟異常處理無關,必須在程序運行前就修正
異常處理的兩種方式:
1.if判斷式
2.python專有異常處理
if判斷式
總結:
1.if判斷式的異常處理只能針對某一段代碼,對于不同的代碼段的相同類型的錯誤你需要寫重復的if來進行處理。
2.在你的程序中頻繁的寫與程序本身無關,與異常處理有關的if,會使得你的代碼可讀性極其的差
3.if是可以解決異常的,只是存在1,2的問題,所以,千萬不要妄下定論if不能用來異常處理。
python專有異常處理
python:為每一種異常定制了一個類型,然后提供了一種特定的語法結構用來進行異常處理
1.基本語法:
# 異常捕獲基本格式:
try:
被檢測的代碼塊
except 異常類型:
try中一旦檢測到異常,就執行這個位置的邏輯
f = open('1.txt')
g = (line.strip() for line in f)
try:
for i in g:
print(i)
except StopIteration:
f.close()
2.異常類只能用于處理指定的異常情況
s1 = 'hello'
try:
int(s1)
except IndexError as e:
print(e)
# 未捕獲到異常,程序直接報錯
3.處理多分支
s1 = 'hello'
try:
int(s1)
except IndexError as e:
print(e)
except KeyError as e:
print(e)
except ValueError as e:
print(e)
4.萬能異常:Exception
利用萬能異常定制不同邏輯:
def func():
print(111)
def func1():
print(222)
dic = {1:func,2:func1}
while True:
try:
user = int(input('請輸入數字:'))
dic[user]()
break
except ValueError:
print("請輸入數字")
except KeyError:
print("不在索引之內")
except Exception:
print("意外錯誤")
5.異常的其他機構
try else finally
try:
dic = {'name':"alex"}
print(dic['age'])
l1 = [1,2,3]
print(l1[100])
except KeyError:
print("沒有此鍵")
except IndexError:
print("沒有此下標")
else:
print("如果沒有出現異常則執行這里")
finally:
print('finally 666')
總結:
?1.except 必須依賴于try, else必須依賴于except和try
?2.finally只是依賴于try.
?3.finally : 在異常出現之前,執行finally語句(異常捕獲不算錯誤)
?4.finally 用在 關閉數據庫連接,文件句柄關閉,數據保存等,用到finally.
def func():
try:
print(111)
return 666
finally:
print(222)
print(func())
6.主動觸發異常
class A:
def func(self):
raise Exception("使用父類方法")
class B(A):
def func(self):
print("in B func")
class C(A):
def func(self):
print("in C func")
class D(A):
def func1(self):
print("in D func1")
def function(obj):
obj.func()
obj1 = D()
function(obj1)
# 結果:
Exception: 使用父類方法
try:
raise TypeError('類型錯誤')
except Exception as e:
print(e)
7.自定義異常
class EvaException(BaseException):
def __init__(self,msg):
self.msg = msg
def __str__(self):
return self.msg
try:
raise EvaException("類型錯誤")
except EvaException as e:
print(e)
8.斷言
斷言: 展現出一種強硬的態度,若條件不成立,立馬報錯,結束下面的執行語句
# assert 條件
assert 1 == 1
assert 1 == 2
9.try..except的方式比較if的方式的好處
?1.改善代碼容錯性
?2.增強程序魯棒性
10.萬能異常與多分支的比較
什么時候用萬能? 什么時候用多分支?
?如果你對錯誤信息不關心,只是想要排除錯誤讓程序繼續運行. 用萬能異常.
?你對錯誤信息要進行明確的分流,讓你的程序多元化開發.
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态