python異常 Exception


異常 Exception

  什么是錯誤:
    錯誤是指由於邏輯或語法等導致一個程序無法正常執行的問題

  什么是異常
    異常是程序出錯時標識的一種狀態

  作用:
    用於信號,通知上層調用者有錯誤產生,需要處理

try 語句的兩種語法:
  try-except 語句
  try-finally 語句

try-except語句
  語法:

    try:
      可能觸發異常的語句
    except 錯誤類型1 [as 變量1]:
      異常處理語句1
    except 錯誤類型2 [as 變量2]:
      異常處理語句2
    except (錯誤類型3,錯誤類型4) [as 變量3]:
      異常處理句塊3
    ...
    except:
      其它異常處理語句
    else: 
      未發生異常語句
    finally:
      最終語句
    注: [] 代表其中的內容可以省略
    作用:
      償式捕獲異常,得到異常通知,將程序由異常流程轉為正常流程並繼續執行
View Code
  # 此示例示意異常處理語句try-except 的語法和用法
  def div_apple(n):
    print("%d個蘋果你想分給幾個人?" % n)
    s = input("請輸入人數: ")
    cnt = int(s) # 可能觸發ValueError類型的錯誤
    result = n / cnt # 可能觸發ZeroDivistion類型的錯誤
    print('每個人分了', result, '個蘋果')

  try:
    print("開始分蘋果")
    div_apple(10)
    print('分蘋果成功!')
  except ValueError:
    print("分蘋果過程中出現錯誤,分蘋果失敗!!!")
  except ZeroDivisionError:
    print("沒有人來,蘋果被收回,自己吃了!!!")

  print("程序正常退出")
View Code
  # 此示例示意異常處理語句try-except 的語法和用法
  def div_apple(n):
    print("%d個蘋果你想分給幾個人?" % n)
    s = input("請輸入人數: ")
    cnt = int(s) # 可能觸發ValueError類型的錯誤
    result = n / cnt # 可能觸發ZeroDivistion類型的錯誤
    print('每個人分了', result, '個蘋果')

  try:
    print("開始分蘋果")
    div_apple(10)
    print('分蘋果成功!')
  except (ValueError, ZeroDivisionError):
    print("分蘋果失敗,蘋果不分了!")

  print("程序正常退出")
View Code

try-finally語句
  語法:
    try:
      可能觸發異常的語句
    finally:
      最終語句
    說明:
      finally 子句不可以省略一定不存在except 子句
    作用:
      通常用try-finally語句來做觸發異常時必須要處理的事情,無論異常是否發生,finally子句都會被執行try-finally 語句不會改變程序的(正常/異常)狀態

  # 此示例示意try-finally語句的作用和用法
  def fry_egg(): # 煎雞蛋
    print("打開天燃氣...")
    try:
      count = int(input('請輸入雞蛋個數: '))
      print('成功煎了', count, '個雞蛋')
    finally:
      print("關閉天燃氣")

  try:
    fry_egg()
  except:
    print("煎雞蛋過程中出錯")

  print("程序正常退出")
View Code

raise 語句
  作用:
    觸發一個錯誤,讓程序進入異常狀態發送錯誤通知給調用者
  語法:
    raise 異常類型
    或
    raise 異常對象
    或
    raise # 重新觸發上一次異常

  # 此示例示意raise語句的作用和用法
  def make_except():
    print('函數開始')
    # 在此處發錯ValueError類型的錯誤通知給上層調用者
    raise ValueError

    print("函數結束")

  try:
    make_except()
  except ValueError:
    print("收到make_except函數內部發生的錯誤通知!!!")

  print("程序運行結束")
View Code
  # 此示例示意用raise語句來傳遞錯誤信息
  def fx():
    print("fx開始")
    # ... 此處可能會觸發異常
    error = ValueError("這是錯誤信息!!!")
    raise error

    print("fx結束")

  def fy():
    print('fy開始')
    try:
      fx()
    except ValueError as e:
      print("fx函數發生錯誤,e=", e)
      raise # 等同於 raise e
    print('fy結束')

  try:
    fy()
  except ValueError as err:
    print("收到fy函數內部發生了錯誤,數據是", err)
    print("程序正常結束")
View Code

assert語句(斷言語句)
  語法:
    assert 真值表達式,錯誤數據(通常是字符串)
  作用:
    當真值表達式為False時,用錯誤數據創建一個AssertionError類型的錯誤,並進入異常狀態
等同於

  if bool(真值表達式) == False:
  raise AssertionError(錯誤數據)

  def get_age():
    '''此函數只返回1~140的整數'''
    s = input('請輸入學生年齡:')
    a = int(s)
    assert 1 <= a <= 140, '年齡超出范圍'
    return a

  try:
    age = get_age()
    print('學生的年齡是:',age)
  except ValueError:
    print('用戶輸入的不是整數!!')
View Code

異常相關的語句:
  try-except 語句
    接收錯誤通知
  try-finally 語句
    無論是正常流程還是異常流程,執行必須要執行的語句
  raise 語句
    觸發錯誤通知,讓程序進行異常流程
  assert 語句
    根據條件觸發AssertionError類型的異常通知,讓程序進入異常流程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM