assert python 中斷_Python 基礎入門之從變數到異常值處理(異常處理)
阿新 • • 發佈:2021-01-15
技術標籤:assert python 中斷
一 、Python 異常
- python異常是在程式執行過程中,影響了程式的正常執行發生的事件。一般情況下,在Python無法正常處理程式時就會發生一個異常,出現一個錯誤。所以為了程式的正常執行,我們需要對異常進行處理。
1. Python 標準異常總結
- BaseException:所有異常的 基類
- Exception:常規異常的 基類
- StandardError:所有的內建標準異常的基類
- ArithmeticError:所有數值計算異常的基類
- FloatingPointError:浮點計算異常
- OverflowError:數值運算超出最大限制
- ZeroDivisionError:除數為零
- AssertionError:斷言語句(assert)失敗
- AttributeError:嘗試訪問未知的物件屬性
- EOFError:沒有內建輸入,到達EOF標記
- EnvironmentError:作業系統異常的基類
- IOError:輸入/輸出操作失敗
- OSError:作業系統產生的異常(例如開啟一個不存在的檔案)
- WindowsError:系統呼叫失敗
- ImportError:匯入模組失敗的時候
- KeyboardInterrupt:使用者中斷執行
- LookupError:無效資料查詢的基類
- IndexError:索引超出序列的範圍
- KeyError:字典中查詢一個不存在的關鍵字
- MemoryError:記憶體溢位(可通過刪除物件釋放記憶體)
- NameError:嘗試訪問一個不存在的變數
- UnboundLocalError:訪問未初始化的本地變數
- ReferenceError:弱引用試圖訪問已經垃圾回收了的物件
- RuntimeError:一般的執行時異常
- NotImplementedError:尚未實現的方法
- SyntaxError:語法錯誤導致的異常
- IndentationError:縮排錯誤導致的異常
- TabError:Tab和空格混用
- SystemError:一般的直譯器系統異常
- TypeError:不同型別間的無效操作
- ValueError:傳入無效的引數
- UnicodeError:Unicode相關的異常
- UnicodeDecodeError:Unicode解碼時的異常
- UnicodeEncodeError:Unicode編碼錯誤導致的異常
- UnicodeTranslateError:Unicode轉換錯誤導致的異常
2. Python標準警告總結
- Warning:警告的基類
- DeprecationWarning:關於被棄用的特徵的警告
- FutureWarning:關於構造將來語義會有改變的警告
- UserWarning:使用者程式碼生成的警告
- PendingDeprecationWarning:關於特性將會被廢棄的警告
- RuntimeWarning:可疑的執行時行為(runtime behavior)的警告
- SyntaxWarning:可疑語法的警告
- ImportWarning:用於在匯入模組過程中觸發的警告
- UnicodeWarning:與Unicode相關的警告
- BytesWarning:與位元組或位元組碼相關的警告
- ResourceWarning:與資源使用相關的警告
二 、Python 異常處理
1、 try - except 語句
try:
檢測範圍
except Exception[as reason]:
出現異常後的處理程式碼
try 語句按照如下方式工作:
- 首先,執行
try
子句(在關鍵字try
和關鍵字except
之間的語句) - 如果沒有異常發生,忽略
except
子句,try
子句執行後結束。 - 如果在執行
try
子句的過程中發生了異常,那麼try
子句餘下的部分將被忽略。如果異常的型別和except
之後的名稱相符,那麼對應的except
子句將被執行。最後執行try - except
語句之後的程式碼。 - 如果一個異常沒有與任何的
except
匹配,那麼這個異常將會傳遞給上層的try
中。
例:
try:
f = open('test.txt')
print(f.read())
f.close()
except OSError:
print('開啟檔案出錯')
# 開啟檔案出錯
- 一個
try
語句可能包含多個except
子句,分別來處理不同的特定的異常。最多隻有一個分支會被執行。
例:
try:
int("abc")
s = 1 + '1'
f = open('test.txt')
print(f.read())
f.close()
except OSError as error:
print('開啟檔案出錯n原因是:' + str(error))
except TypeError as error:
print('型別出錯n原因是:' + str(error))
except ValueError as error:
print('數值出錯n原因是:' + str(error))
# 數值出錯
# 原因是:invalid literal for int() with base 10: 'abc'
2、 try - except - else 語句
- 如果在
try
子句執行時沒有發生異常,Python將執行else
語句後的語句 - 使用
except
而不帶任何異常型別,這不是一個很好的方式,我們不能通過該程式識別出具體的異常資訊,因為它捕獲所有的異常。
try:
正常的操作
......................
except:
發生異常,執行這塊程式碼
......................
else:
如果沒有異常執行這塊程式碼
例:
dict1 = {'a': 1, 'b': 2, 'v': 22}
try:
x = dict1['y']
except LookupError:
print('查詢錯誤')
except KeyError:
print('鍵錯誤')
else:
print(x)
# 查詢錯誤
2.1 使用except而帶多種異常型別。
try:
正常的操作
......................
except(Exception1[, Exception2[,...ExceptionN]]]):
發生以上多個異常中的一個,執行這塊程式碼
......................
else:
如果沒有異常執行這塊程式碼
例:一個except
子句可以同時處理多個異常,這些異常將被放在一個括號裡成為一個元組。
try:
s = 1 + '1'
int("abc")
f = open('test.txt')
print(f.read())
f.close()
except (OSError, TypeError, ValueError) as error:
print('出錯了!n原因是:' + str(error))
# 出錯了!
# 原因是:unsupported operand type(s) for +: 'int' and 'str'
3、 try - except - finally 語句
try:
<語句>
except:
<語句>
finally:
<語句> #退出try時總會執行
raise
- 不管
try
子句裡面有沒有發生異常,finally
子句都會執行。
def divide(x, y):
try:
result = x / y
print("result is", result)
except ZeroDivisionError:
print("division by zero!")
finally:
print("executing finally clause")
divide(2, 1)
# result is 2.0
# executing finally clause
divide(2, 0)
# division by zero!
# executing finally clause
divide("2", "1")
# executing finally clause
# TypeError: unsupported operand type(s) for /: 'str' and 'str'
3、觸發異常
使用raise語句自己觸發異常,其語法格式如下:
raise [Exception [, args [, traceback]]]
- 語句中 Exception 是異常的型別,args 是自已提供的異常引數。
- 最後一個引數為可選引數,如果存在,是跟蹤異常物件。
例:
try:
raise NameError('HiThere')
except NameError:
print('An exception flew by!')
# An exception flew by!