錯誤處理

Intermediate Python for Developers

Jasmin Ludolf

Senior Data Science Content Developer

Pandas 追蹤(traceback)

顯示故意回傳錯誤的程式追蹤

  • exceptraise

  • 預想可能發生的錯誤

Intermediate Python for Developers

設計思維

  • 他人會怎麼用我們的自訂函式?
  • 測試不同用法
  • 找出可能出現的錯誤

城市中的各種通勤方式

Intermediate Python for Developers

自訂函式的錯誤處理

def average(values):
    # Calculate the average
    average_value = sum(values) / len(values)
    return average_value
Intermediate Python for Developers

可能會出錯的地方?

  • average() 預期輸入 list 或 set
  • 參數超過 1 個 🛑
  • 使用錯誤的資料型別 🛑
Intermediate Python for Developers

可能會出錯的地方?

sales_dict = {"cust_id": ["JL93", "MT12", "IY64"],
              "order_value": [43.21, 68.70, 82.19]}
print(average(sales_dict))

帶有 TypeError 的追蹤

Intermediate Python for Developers

先前的錯誤處理作法

  • 控制流程 ifelifelse
  • 文件字串(docstring)
Intermediate Python for Developers

try-except

def average(values):

try:
# Code that might cause an error average_value = sum(values) / len(values) return average_value
except:
# Code to run if an error occurs print("average() accepts a list or set. Please provide a correct data type.")
Intermediate Python for Developers

raise

def average(values):
    # Check data type
    if type(values) in (list, set):

# Run if appropriate data type was used average_value = sum(values) / len(values) return average_value
Intermediate Python for Developers

raise

def average(values):
    # Check data type
    if type(values) in (list, set):

# Run if appropriate data type was used average_value = sum(values) / len(values) return average_value
else: # Run if an Exception occurs raise
Intermediate Python for Developers

raise TypeError

def average(values):
    # Check data type
    if type(values) in (list, set):

# Run if appropriate data type was used average_value = sum(values) / len(values) return average_value
else: # Run if an Exception occurs raise TypeError("average() accepts a list or set, please provide a correct data type.")
Intermediate Python for Developers

raise TypeError 輸出

print(average(sales_dict))

TypeError 輸出,顯示要求提供正確資料型別的自訂訊息

Intermediate Python for Developers

try-except vs. raise

try-except

  • 避免產生錯誤
  • 之後的程式仍可執行

raise

  • 會主動產生錯誤
  • 避免執行後續程式
Intermediate Python for Developers

一起來練習吧!

Intermediate Python for Developers

Preparing Video For Download...