Python3之錯誤和異常淺談

日期:2019年11月15日
作者:Commas
註釋:學習就是爲了忘記,爲了讓程序更健壯的運行,那就總結一下python的錯誤和異常吧…

如果您想了解更多有關Python的知識,那麼請點【我】
《我的Python淺談系列目錄》



一、錯誤與異常的定義

分類 Error 定義
錯誤 SyntaxError 一般指語法錯誤,因爲語法錯誤,無法正常解析代碼,導致程序無法正常運行的錯誤
異常 Exception 在程序運行期間檢測到的錯誤被稱之爲異常,若不對異常進行,程序將會終止

1、錯誤演示

# 1、錯誤代碼演示:
def func
    print("我是函數func")
func()
# 控制檯輸出:
#  File "D:/test.py", line 2
#    def func
#  SyntaxError: invalid syntax
#===============================
# 2、正確代碼演示:
def func():
    print("我是函數func")
func()
# 控制檯輸出:我是函數func
#-------------------------------
# 小結:1中語法錯誤,因爲函數聲明後面無():

2、 異常演示

# 1、錯誤代碼演示:
a = 1
# b爲模擬用戶輸入值或計算值
b = 0 
num = a/b
print("game over")
# 控制檯輸出:
# Traceback (most recent call last):
#  File "D:/test.py", line 5, in <module>
#    num = a/b
#  ZeroDivisionError: division by zero
#-------------------------------
# 小結:
# 	因爲第5行異常導致程序終止,
# 	所以控制檯沒有輸出game over
#===============================
# 2、正確代碼演示:
try:
    a = 1
    # b爲模擬用戶輸入值或計算值
    b = 0
    num = a / b
    print("game over")
except ZeroDivisionError as e:
    print(e)
print("game over")
# 控制檯輸出:
# division by zero
# game over
#-------------------------------
# 小結:
# 	1/0沒有終止程序,因爲對異常進行了捕獲。

小結:對於可能會發生異常的代碼塊,最好進行異常捕獲,可以避免程序因爲異常而導致的程序終止,使程序更加健壯的運行。

二、異常捕獲流程圖

異常捕獲及異常處理部分
有異常
無異常
try語句
檢測異常
except語句
else語句
finally語句
程序1
程序1

三、異常捕獲語法

1、簡單語法,無異常輸出

try:
    # 需要異常捕獲的代碼塊放到這兒
    pass
except:
	# 異常描述 or 異常處理
    pass

2、簡單語法,有異常輸出

# (2)簡單語法,有異常捕獲
try:
    # 需要異常捕獲的代碼塊放到這兒
    pass
except Exception as e:
	# 異常描述 or 異常處理
    print(e)

3、完整語法

try:
    # 需要異常捕獲的代碼塊放到這兒
    pass
except Error1 as e:
    # Error1:僞代碼,應該用異常類,
    # 如IndexError、KeyError 等等
    print(e)
except Error2 as e:
    # Error2:僞代碼,應該用異常類,
    # 如IndexError、KeyError 等等
    print(e)
except (Error3, Error4) as e:
    # Error3、Error4:僞代碼,異常類名
    # 如IndexError、KeyError 等等
    print(e)
except Exception as e:
    # Exception:萬能異常類(常規錯誤基類)
    # 建議在不知道需要捕獲的異常類型下使用
    print(e)
else:
    # 若沒有發生異常,則執行此處代碼塊
    pass
finally:
    # 無論是否發生異常,
    # 此處代碼塊都會執行(最後執行)
    pass

四、異常類型速查表

異常名稱 描述
BaseException 所有異常的基類
SystemExit 解釋器請求退出
KeyboardInterrupt 用戶中斷執行(通常是輸入^C)
Exception 常規錯誤的基類
StopIteration 迭代器沒有更多的值
GeneratorExit 生成器(generator)發生異常來通知退出
StandardError 所有的內建標準異常的基類
ArithmeticError 所有數值計算錯誤的基類
FloatingPointError 浮點計算錯誤
OverflowError 數值運算超出最大限制
ZeroDivisionError 除(或取模)零 (所有數據類型)
AssertionError 斷言語句失敗
AttributeError 對象沒有這個屬性
EOFError 沒有內建輸入,到達EOF 標記
EnvironmentError 操作系統錯誤的基類
IOError 輸入/輸出操作失敗
OSError 操作系統錯誤
WindowsError 系統調用失敗
ImportError 導入模塊/對象失敗
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 用戶代碼生成的警告

本文參考:
1、https://www.runoob.com/python/python-exceptions.html


版權聲明:本文爲博主原創文章,如需轉載,請給出:
原文鏈接:https://blog.csdn.net/qq_35844043/article/details/103160906

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章