python 内存溢出能捕获吗_从0基础学习Python (19)[面向对象开发过程中的异常(捕获异常~相关)]...
從0基礎學習Python (Day19)
面向對象開發過程中的=>異常
什么是異常
? 當程序在運行過程中出現的一些錯誤,或者語法邏輯出現問題,解釋器此時無法繼續正常執行了,反而出現了一些錯誤的提示,這就是異常(錯誤代碼或者BUG)
程序出現異常的后果
? 程序在運行過程中出現了異常
? 輕則功能無法實現,或者功能運行結果出錯
? 重則整個程序崩潰!!!!!
捕獲異常
? 捕獲異常是在編程中常用的一種處理代碼中可能會出現漏洞的一些基礎解決方案
捕獲異常的方法
使用try—except語法
try:
#可能會出現異常的代碼
except:
#如果try里面的哪行代碼出現異常會直接跳到這里面執行代碼
? ·這種捕獲異常存在一個問題,只會捕獲異常然后執行except中的處理代碼,但是無法得知異常的問題
捕獲指定異常
例:
print(a)
#執行會拋異常
#SyntaxError: invalid character in identifier
#在“:”之前叫異常類,之后叫異常信息
語法
try:
#可能會出現異常的代碼
except 可能出現的異常類型:
#如果捕獲到異常是指定的這個類型的執行代碼
? 在使用捕獲指定異常的時候一定要考慮所有有可能出現的異常類型,如果出現的異常不在所寫出的“可能出現的異常類”之中,則會報錯
注意
如果執行的代碼的異常類型和要捕獲的異常類型不一致則無法捕獲異常
一般try下面只放一行嘗試的代碼
捕獲多個指定異常
? 當在捕獲異常的時候,可以把要捕獲的異常類型的名字,放到except之后,并使用元祖的方式進行體現,或者采用多個except之后放上不同的異常類型的名字
異常類
? 異常類是指在Python內置的一些類,這些類代表了Python中的一些異常問題
異常名稱
描述
BaseException
所有異常的基類
SystemExit
解釋器請求退出
KeyboardInterrupt
用戶中斷執行(通常是輸入^C)
Exception
常規錯誤的基類
StopIteration
迭代器沒有更多的值
GeneratorExit
生成器(generator)發生異常來通知退出
SystemExit
Python 解釋器請求退出
StandardError
所有的內建標準異常的基類
ArithmeticError
所有數值計算錯誤的基類
FloatingPointError
浮點計算錯誤
OverflowError
數值運算超出最大限制
ZeroDivisionError
除(或取模)零 (所有數據類型)
AssertionError
斷言語句失敗
AttributeError
對象沒有這個屬性
EOFError
沒有內建輸入,到達EOF 標記
EnvironmentError
操作系統錯誤的基類
IOError
輸入/輸出操作失敗
OSError
操作系統錯誤
WindowsError
系統調用失敗
ImportError
導入模塊/對象失敗
KeyboardInterrupt
用戶中斷執行(通常是輸入^C)
LookupError
無效數據查詢的基類
IndexError
序列中沒有沒有此索引(index)
KeyError
映射中沒有這個鍵
MemoryError
內存溢出錯誤(對于Python 解釋器不是致命的)
NameError
未聲明/初始化對象 (沒有屬性)
UnboundLocalError
訪問未初始化的本地變量
ReferenceError
弱引用(Weak reference)試圖訪問已經垃圾回收了的對象
RuntimeError
一般的運行時錯誤
NotImplementedError
尚未實現的方法
SyntaxError
Python 語法錯誤
IndentationError
縮進錯誤
TabError
Tab 和空格混用
SystemError
一般的解釋器系統錯誤
TypeError
對類型無效的操作
ValueError
傳入無效的參數
UnicodeError
Unicode 相關的錯誤
UnicodeDecodeError
Unicode 解碼時的錯誤
UnicodeEncodeError
Unicode 編碼時錯誤
UnicodeTranslateError
Unicode 轉換時錯誤
Warning
警告的基類
DeprecationWarning
關于被棄用的特征的警告
FutureWarning
關于構造將來語義會有改變的警告
OverflowWarning
舊的關于自動提升為長整型(long)的警告
PendingDeprecationWarning
關于特性將會被廢棄的警告
RuntimeWarning
可疑的運行時行為(runtime behavior)的警告
SyntaxWarning
可疑的語法的警告
UserWarning
用戶代碼生成的警告
捕獲異常描述信息
語法
try:
#可能會出現異常的代碼
except (指定的異常類型1,指定的異常類型2,...) as 變量:
print(變量)
? 將捕獲的區域中的代碼出現的指定的異常問題的描述信息存放在變量中,然后輸出
捕獲所有異常
? 所有異常類的父類都是Exception類
語法
try:
#可能會出現異常的代碼
except Exception as 變量:
print(變量)
異常的else
? else表示的是如果沒有捕獲到異常則需要執行的代碼
語法
try:
#可能會出現異常的代碼
except (可能出現的異常類型1,可能出現的異常類型2)as 變量:
#如果捕獲到異常是指定的這個類型的執行代碼
print(變量)
else:
#如果沒有捕獲到異常則需要執行的代碼
異常的finnally
? finnally表示最終結果,不論代碼是否捕獲到異常(try中的代碼執行之后不管是進入了except還是else)最終都要進入finnally執行
語法
try:
#可能會出現異常的代碼
except (可能出現的異常類型1,可能出現的異常類型2)as 變量:
#如果捕獲到異常是指定的這個類型的執行代碼
print(變量)
else:
#如果沒有捕獲到異常則需要執行的代碼
finnally:
#不論有無bug都執行這一行
異常的傳遞
? 可以理解為異常的嵌套:
# 計算1+100
import time
# 程序的時間線
def fun():
try:
res = 0
print("1"+2)
print(time.time())
# 0.0168831
try:
for i in range(1, 101):
res += i
print(res)
time
time.sleep(2)
except:
print("程序被意外終止1")
except:
print("程序被意外終止2")
finally:
print(time.time())
# 0.0178795
return res
print( fun())
自定義異常
? 在python中一般拋出的異常的語法是異常類對象,這些異常類對象是Python提前封裝好的
語法
try:
raise
#用來引發異常,讓執行except中的語句
except Exception as res:
#捕獲到自定義異常執行代碼
else:
#如果沒有捕獲到異常則需要執行的代碼
finnally:
#不論有無bug都執行這一行
? 需求:檢測一些數據例如年齡不能小于0(小于0拋異常)
class AgeInputError(Exception):
def __init__(self, age):
self.age = age
self.minage = 0
def __str__(self):
return f"你輸入的年齡是{self.age},不能小于{self.minage}"
def main():
try:
age = int(input("請輸入年齡:"))
if age < 0:
# raise 關鍵字是返回一個異常
raise AgeInputError(age)
except Exception as res:
print(res)
else:
print("年齡無誤")
finally:
print("注冊完成")
main()
注意:
? python中的raise關鍵字用于引發一個異常,基本上作用和C#中或Java中的throw關鍵字相同
Day19-------END
總結
以上是生活随笔為你收集整理的python 内存溢出能捕获吗_从0基础学习Python (19)[面向对象开发过程中的异常(捕获异常~相关)]...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: a java runtime envi_
- 下一篇: springboot接口签名统一效验_P