Xử lý lỗi

Python trung cấp dành cho nhà phát triển

Jasmin Ludolf

Senior Data Science Content Developer

Pandas traceback

Traceback hiển thị mã cố ý trả về lỗi

  • except, raise

  • Cố gắng dự đoán cách lỗi có thể xảy ra

Python trung cấp dành cho nhà phát triển

Tư duy thiết kế

  • Người dùng có thể dùng hàm tùy chỉnh thế nào?
  • Thử các cách khác nhau
  • Tìm các lỗi có thể xảy ra

Các loại phương tiện đi lại trong thành phố

Python trung cấp dành cho nhà phát triển

Xử lý lỗi trong hàm tùy chỉnh

def average(values):
    # Tính trung bình
    average_value = sum(values) / len(values)
    return average_value
Python trung cấp dành cho nhà phát triển

Họ có thể sai ở đâu?

  • average() cần list hoặc set
  • Truyền hơn một đối số 🛑
  • Dùng sai kiểu dữ liệu 🛑
Python trung cấp dành cho nhà phát triển

Họ có thể sai ở đâu?

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

Traceback với TypeError

Python trung cấp dành cho nhà phát triển

Xử lý lỗi trước đây

  • Luồng điều khiển if, elif, else
  • Docstring
Python trung cấp dành cho nhà phát triển

try-except

def average(values):

try:
# Mã có thể gây lỗi average_value = sum(values) / len(values) return average_value
except:
# Chạy khi có lỗi print("average() chỉ nhận list hoặc set. Vui lòng cung cấp đúng kiểu dữ liệu.")
Python trung cấp dành cho nhà phát triển

raise

def average(values):
    # Kiểm tra kiểu dữ liệu
    if type(values) in (list, set):

# Chạy khi kiểu dữ liệu phù hợp average_value = sum(values) / len(values) return average_value
Python trung cấp dành cho nhà phát triển

raise

def average(values):
    # Kiểm tra kiểu dữ liệu
    if type(values) in (list, set):

# Chạy khi kiểu dữ liệu phù hợp average_value = sum(values) / len(values) return average_value
else: # Chạy khi xảy ra Exception raise
Python trung cấp dành cho nhà phát triển

raise TypeError

def average(values):
    # Kiểm tra kiểu dữ liệu
    if type(values) in (list, set):

# Chạy khi kiểu dữ liệu phù hợp average_value = sum(values) / len(values) return average_value
else: # Chạy khi xảy ra Exception raise TypeError("average() accepts a list or set, please provide a correct data type.")
Python trung cấp dành cho nhà phát triển

Kết quả raise TypeError

print(average(sales_dict))

Kết quả TypeError với thông báo tùy chỉnh yêu cầu kiểu dữ liệu đúng

Python trung cấp dành cho nhà phát triển

try-except vs. raise

try-except

  • Tránh phát sinh lỗi
  • Vẫn chạy mã phía sau

raise

  • Sẽ phát sinh lỗi
  • Ngăn chạy mã phía sau
Python trung cấp dành cho nhà phát triển

Ayo berlatih!

Python trung cấp dành cho nhà phát triển

Preparing Video For Download...