10 Ngoại lệ trong python

Chuyên mục: Python
Cập nhật: 05/12/2024
10 Ngoại lệ trong python

Raise

ItemsinCarrt = 0

if ItemsinCarrt != 2:
	raise Exception('Sản phẩm trong giỏ hàng không hợp lệ')

Đoạn mã trên có thể được giải thích như sau

  • ItemsinCarrt = 0: Đây là một dòng khai báo biến ItemsinCarrt và gán giá trị 0 cho nó. Biến này có thể đại diện cho số lượng sản phẩm trong giỏ hàng.
  • if ItemsinCarrt != 2:: Câu lệnh điều kiện if kiểm tra xem giá trị của biến ItemsinCarrt có khác 2 hay không. Nếu giá trị của ItemsinCarrt không bằng 2 (tức là giỏ hàng không có chính xác 2 sản phẩm), thì điều kiện này sẽ được đánh giá là đúng.
  • raise Exception('Sản phẩm trong giỏ hàng không hợp lệ'): Nếu điều kiện trên đúng, câu lệnh raise sẽ tạo ra một ngoại lệ (Exception) với thông báo 'Sản phẩm trong giỏ hàng không hợp lệ'. Điều này sẽ ngừng thực thi chương trình và báo lỗi về vấn đề giỏ hàng không có số lượng sản phẩm hợp lệ (ở đây là số lượng khác 2).

Pass và assert

ItemsinCarrt = 0
if ItemsinCarrt != 2:
	pass
assert(ItemsinCarrt == 2)

Đoạn mã trên có thể được giải thích như sau:

1. ItemsinCarrt = 0

  • Dòng này khai báo và gán giá trị 0 cho biến ItemsinCarrt. Đây có thể là số lượng sản phẩm trong giỏ hàng, và ở thời điểm này, giỏ hàng không chứa sản phẩm nào.

2. if ItemsinCarrt != 2:

  • Câu lệnh if kiểm tra xem giá trị của ItemsinCarrt có khác 2 hay không. Trong trường hợp này, vì ItemsinCarrt được gán giá trị 0, điều kiện ItemsinCarrt != 2 sẽ đúng (vì 0 != 2).

3. pass

  • Câu lệnh pass được sử dụng để "đánh dấu" một khối lệnh mà không thực hiện bất kỳ hành động nào. Nó tương tự như một placeholder trong Python.
  • Trong trường hợp này, khi điều kiện if ItemsinCarrt != 2 đúng, chương trình không làm gì cả và tiếp tục. Do đó, nếu giỏ hàng không có 2 sản phẩm, chương trình sẽ không thực hiện thêm bất kỳ hành động nào.

4. assert(ItemsinCarrt == 2)

  • assert là một câu lệnh kiểm tra điều kiện. Nếu điều kiện trong assert không đúng, nó sẽ gây ra một ngoại lệ (AssertionError) và chương trình sẽ dừng lại.
  • Trong trường hợp này, điều kiện kiểm tra là ItemsinCarrt == 2. Tuy nhiên, trước đó biến ItemsinCarrt đã được gán giá trị 0, do đó điều kiện này sẽ không đúng và chương trình sẽ gây ra một ngoại lệ AssertionError.

Try EXCEPT

try:
	with open('filelog.txt','r') as reader:
		reader.read()
except:
	print('NKDKKD')

1. try:

  • Câu lệnh try mở đầu một khối mã mà bạn dự đoán có thể gây ra lỗi. Mã trong khối try sẽ được thực thi trước, và nếu có lỗi xảy ra, Python sẽ chuyển đến khối except để xử lý lỗi.

2. with open('filelog.txt', 'r') as reader:

  • Đây là cách mở một tệp tin (filelog.txt) để đọc ('r' là chế độ đọc).
  • with là một cấu trúc đặc biệt trong Python giúp quản lý tệp tin hoặc tài nguyên một cách tự động, đảm bảo rằng tài nguyên được giải phóng đúng cách (đóng tệp sau khi sử dụng).
  • reader là đối tượng file được tạo ra khi mở tệp, và bạn có thể sử dụng reader để đọc nội dung của tệp.

3. reader.read()

  • Dòng này gọi phương thức read() của đối tượng reader để đọc toàn bộ nội dung của tệp filelog.txt. Tuy nhiên, kết quả của việc đọc không được lưu lại hoặc xử lý trong trường hợp này, vì vậy mã này chỉ đơn giản là đọc tệp mà không làm gì với nội dung đã đọc.

4. except:

  • Nếu bất kỳ lỗi nào xảy ra trong khối try (ví dụ: tệp filelog.txt không tồn tại, hoặc không thể mở tệp vì lý do nào đó), chương trình sẽ chuyển đến khối except để xử lý lỗi đó.

5. print('NKDKKD')

  • Nếu có bất kỳ lỗi nào xảy ra trong khối try, câu lệnh print('NKDKKD') sẽ được thực thi, và thông báo 'NKDKKD' sẽ được in ra màn hình.
  • Dòng này có thể coi là thông báo lỗi mặc định khi gặp sự cố, nhưng nó không cung cấp chi tiết về lỗi thực tế.

Cách phát hiện ra lỗi hoàn chỉnh trong try excrept

try:
	with open('log.txt','r') as reader:
		reader.read()
except Exception as e:# sử dụng  Exception as e
	print(e) # in ra : [Errno 2] No such file or directory: 'log.txt' nghĩa là lỗi xuất hiện ở dòng 2, và ko có file log.txt

FINALLY

cú pháp:

try:
    # Mã có thể gây ra lỗi
except SomeException as e:
    # Xử lý lỗi
finally:
    # Mã này luôn được thực thi, kể cả khi có lỗi hoặc không

ví dụ

try:
    x = 10 / 0
except ZeroDivisionError as e:
    print("Không thể chia cho 0!")
finally:
    print("Khối mã này luôn được thực thi.")

Mục đích của finally:

  • Đảm bảo các tài nguyên (ví dụ: file, kết nối mạng) được đóng hoặc giải phóng một cách an toàn.
  • Dù có xảy ra lỗi hay không, đoạn mã trong finally vẫn sẽ được thực thi, điều này hữu ích để đảm bảo rằng các bước cần thiết (như đóng file, kết nối) được thực hiện.