Dịch bởi: một thanh niên dùng quá nhiều try – except và giờ đang chổng mông lên đi phích bấc]
Try Except đôi khi khiến cuộc đời bạn trở nên rắc rối không cần thiết.
Như nhiều ngôn ngữ lập trình khác, Python hỗ trợ việc bắt lỗi và xử lý ngoại lệ. Tuy nhiên tôi thấy tính năng này đôi khi bị lạm dụng quá nhiều.
Một số lập trình viên, đặc biệt những người mới, có xu hướng sử dụng try … except … rất nhiều, kể từ khi họ biết dùng món này. Tuy nhiênnnnnnnn, tôi cho rằng điều này nên sớm phải dừng lại, nhất là khi bạn đang trong giai đoạn xây dựng phong cách viết code cho riêng mình.
Bạn nên hiểu rằng: các bug hay các vấn đề nên được phô bày ra để giải quyết, thay vì lại đem giấu nó đi.
TẠI SAO DÙNG TRY EXCEPT LẠI GÂY RA VẤN ĐỀ?
Giả sử tôi có đoạn code như hình 1.
[Hình 1]
Ta có thể dễ dàng nhận ra lỗi nằm ở đâu trong vài dòng code này. Tuy nhiên, tưởng tượng bạn đang làm 1 project siêu to khổng lồ, thì việc in ra mỗi 1 dòng “must be str, not int” chẳng có ý nghĩa gì nhiều, và bạn sẽ rất khó để mò ra lỗi ở đâu.
Một ví dụ khác như hình 2.
[Hình 2]
‘c’ là cái gì? Bạn có thể debug với error message là ‘c’ không?
Ví dụ cho một trường hợp tồi tệ hơn ở hình 3
[Hình 3]
Python hơi “khôn” nên đã biết tự biến lỗi thành tính năng
GIẢI PHÁP
Giải pháp củ chuối: dùng Traceback
Traceback là một thư viện có sẵn của python, giúp hiện ra nhiều thông tin hơn về lỗi hay ngoại lệ. Đổi lại bạn sẽ phải viết thêm vài dòng code để làm điều đó giống như hình 4.
[Hình 4]
Giải pháp 1: Raise Exception
Như tôi đã nói, phải phô hết lỗi ra thay vì giấu nó đi. Raise Exeption giúp ta làm điều đó. Ví dụ như hình 5 nhé.
[Hình 5]
Đừng sợ những thông báo đỏ lòm, nhất là khi những cái dòng đỏ đỏ ấy đã chỉ ra chi tiết lỗi ở đâu cho bạn rồi.
Giải pháp 2: Assertion
Mặc dù món assert thường được dùng cho test hơn, nhưng ta cũng có thể dùng nó trong quá trình dev nữa, để tránh bug tối đa có thể. Giải pháp nayf sẽ giống như hình 6.
[Hình 6]
TẠM KẾT
Nắm được những mẹo của ngôn ngữ lập trình là rất tốt. Nếu tôi mà biết được những tính năng thú vị của cái gì đó, tôi cũng sẽ thử dùng nó thật nhiều. Tuy nhiên, đến một lúc nào đó ta sẽ phải nghĩ lại xem có thật sự nên dùng chúng không, lợi và hại là ra sao.
Chính vì thế, đừng có bỏ tất code của bạn vào try exept trong Python. Cứ để lỗi hiện hết ra đi, rồi cuộc đời chúng ta sẽ thật nở hoa!