1. 程式人生 > 其它 >assert python 中斷_Python 基礎入門之從變數到異常值處理(異常處理)

assert python 中斷_Python 基礎入門之從變數到異常值處理(異常處理)

技術標籤:assert python 中斷

e94a7837ef120ff4bea9b5c38abc3b03.png

一 、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!