1. 程式人生 > 程式設計 >Python錯誤的處理方法

Python錯誤的處理方法

異常的捕獲與處理

什麼是錯誤

簡而言之:還沒執行,在語法解析的時候,就發現語法存在問題,這個時候就是錯誤。

什麼是異常

簡而言之:程式碼寫好之後,無明顯語法錯誤(這個時候,編輯器不知道有錯,語法解析時也不知道有錯),但是執行的時候,會發生錯誤,這個時候稱之為異常。

什麼是警告

import warnings

def fxn():
  warnings.warn("deprecated",DeprecationWarning)

異常怎麼處理

異常的處理形式如下:

try:
  你要做的可能會發生異常的事
except 可能會發生的異常:
  發生異常之後要做的事
except 可能會發生的異常2:
  發生異常之後要做的事2
finally:
  最終要做的事情

比如下面的程式碼:

try:
  print(10/0)
except ZeroDivisionError:
  print("除數不能為0")

這個時候再次執行,就不會再出現異常

在平時的開發中,也會使用預定義清理的操作,來避免因為異常而導致程式奔潰,比如在進行IO操作的時候,可以使用:

with open("myfile.txt") as f:
  for line in f:
    print(line,end="")

這樣一旦執行時發生異常,程式會自動幫你關閉檔案,避免整個程式奔潰

自定義異常與異常的丟擲

雖然python中提供了非常多的內建異常類,但是,在平時開發中,針對特定的業務,可能需要自定義異常,此時怎麼辦?

通過自定義繼承Exception類的類,可以實現異常的自定義

class MyException(Exception):
  def __init__(self,parameter):
    err = '非法入參{0},分母不能為0'.format(parameter)
    Exception.__init__(self,err)
    self.parameter = parameter

當我們程式碼中碰到某種特殊業務情況,需要向呼叫方丟擲自定義異常,可以使用 raise 關鍵字

from chapter12.my_exception import MyException

def my_fun(x):
  if x == 0:
    raise MyException(x)
  return 12/x

print(my_fun(-12))

我們在捕獲異常之後,也可以直接將異常丟擲,此時直接使用 raise 關鍵字即可

def my_func():
  try:
    print(10 / 0)
  except ZeroDivisionError:
    print("除數不能為0")
    # 此處直接將捕獲的異常丟擲
    raise

單元測試

什麼是單元測試

  • 單元測試(英語:Unit Testing)又稱為模組測試,是針對程式模組(軟體設計的最小單位)來進行正確性檢驗的測試工作。程式單元是應用的最小可測試部件。在過程化程式設計中,一個單元就是單個程式、函式、過程等;對於面向物件程式設計,最小單元就是方法,包括基類(超類)、抽象類、或者派生類(子類)中的方法。
  • 簡而言之:就是寫一段程式碼,用來驗證另一段程式碼在特定情況下的正確性

單元測試的好處與“壞處”

  • 好處:減少bug、提高程式碼質量、可以放心重構(在未來修改實現的時候,可以保證程式碼的行為仍舊是正確的)
  • "壞處":佔用開發時間,尤其是在起步階段

在python中,如何編寫單元測試

1、新建python檔案,編寫具體業務程式碼

class MyTest():
  def my_add(self,a,b):
    return a + b

2、右鍵類名,選擇Go TO ==》test,或者直接 ctrl+shift +t

Python錯誤的處理方法

3、填寫好相應的模組名及測試類名,點選ok,此時pycharm會幫我們自動建立測試模組及類

Python錯誤的處理方法

4、編寫測試程式碼,並執行單元測試

import unittest
from unittest import TestCase
from test import MyTest

class TestMyTest(TestCase):
def test_add(self):
  s= MyTest()
  self.assertEqual(s.my_add(1,5),6)

if __name__ == "__main__":
unittest.main()

以上就是Python錯誤的處理方法的詳細內容,更多關於Python錯誤處理的資料請關注我們其它相關文章!