Giống như hầu hết các ngôn ngữ lập trình khác, Python hỗ trợ bắt và xử lý các ngoại lệ trong thời gian chạy. Tuy nhiên, đôi khi tôi thấy rằng nó đã bị lạm dụng
Hóa ra là một số nhà phát triển, đặc biệt là những người mới làm quen với Python, có xu hướng sử dụng thử… ngoại trừ… rất nhiều, sau khi họ tìm thấy một tính năng như vậy. Tuy nhiên, tôi muốn nói rằng chúng ta nên cố gắng tránh sử dụng nó nếu có thể, đặc biệt là trong giai đoạn đầu phát triển. Bạn sẽ thấy rằng thà để vấn đề bộc lộ còn hơn là giấu giếm
Trong bài viết này, tôi sẽ trình bày một số ví dụ để cho thấy “try… except…” có thể tạo ra vấn đề như thế nào và đâu là cách tốt hơn trong lập trình Python
Định nghĩa vấn đềẢnh của Geralt trên Pixabay
Hãy bắt đầu với một ví dụ có vấn đề, đó là một tình huống rất điển hình mà tôi đã thấy
def f1[num]:
try:
return [num+1]*2
except Exception as e:
print['Error: ', e]def f2[num]:
try:
return [num+1]*3
except Exception as e:
print['Error: ', e]def f3[num]:
try:
return [num+1]*4
except Exception as e:
print['Error: ', e]
Chúng tôi có ba hàm thực hiện một số phép tính số đơn giản. Tất cả chúng đều được thực hiện với try…ngoại trừ…với mọi thứ. Sau đó, chúng tôi muốn sử dụng chúng trong mã của chúng tôi như sau
num1 = f1[5]
num2 = f2['5']
num3 = f3[5]
Xin lưu ý rằng tôi cố tình chuyển một chuỗi “5” vào hàm thứ hai, vì tôi chỉ muốn tạo một ngoại lệ giả tạo. Kết quả chúng ta có như sau
Chà, ở đây chúng ta chỉ có một vài dòng mã. Không quá khó để nhận ra vấn đề, có lẽ. Tuy nhiên, hãy tưởng tượng rằng bạn đang thực hiện một dự án có quy mô lớn hơn nhiều, thông báo lỗi
num1 = f1[5]
num2 = f2['5']
num3 = f3[5]
3 sẽ không giúp ích nhiều cho bạn trong việc xác định vấn đềMột vi dụ khacẢnh được cung cấp bởi guvo59 trên Pixabay
Thông báo lỗi mà chúng ta có thể nhận được từ đối tượng ngoại lệ
num1 = f1[5]
num2 = f2['5']
num3 = f3[5]
4 đôi khi rất hạn chế. Tôi muốn nói rằng nó không phải lúc nào cũng có ý nghĩa trong Python. Trên thực tế, cái trước không quá tệ vì ít nhất nó cũng cho bạn biết tại sao lại xảy ra lỗi. Hãy xem cái nàydef f4[key]:
try:
d = {'a': 1, 'b': 2}
return d[key]
except Exception as e:
print['Error: ', e]f4['c']
Tất nhiên, trong ví dụ này, chúng tôi chỉ có một dòng mã, chúng tôi biết “c” là gì. Tuy nhiên, một lần nữa, nếu điều này xảy ra trong một dự án, làm cách nào chúng tôi có thể khắc phục sự cố nếu chúng tôi chỉ nhận được thông báo lỗi “c”?
Trường hợp xấu nhấtẢnh của Ramdlon trên Pixabay
Bạn có thể tưởng tượng rằng trường hợp có thể tồi tệ hơn?
Bạn có nghĩ rằng sẽ rất an toàn nếu chúng ta đặt tất cả mã vào khối thử và bắt tất cả các ngoại lệ chung trong khối ngoại trừ không? . Nếu không, tôi có thể khuyên bạn nên sử dụng nó ở mọi nơi. ]
Hãy xem ví dụ này
def f5[num]:
try:
return num*3
except Exception as e:
print['Error: ', e]num = f5['5']
print['Result is', num]
Một lần nữa, chúng tôi định nghĩa một hàm tính toán số rất đơn giản và chuyển một chuỗi vào đó. Chúng tôi có thể mong đợi rằng "ngoại lệ" sẽ bị bắt, nhưng không có ngoại lệ
Python quá linh hoạt để có lỗi. ]
Giải pháp xấu xí. Thư viện truy nguyênẢnh của Geralt trên Pixabay
Nếu bạn muốn thử tất cả mã của mình và nắm bắt các ngoại lệ, bạn có thể sử dụng thư viện
num1 = f1[5]
num2 = f2['5']
num3 = f3[5]
0 được tích hợp sẵn trong Python. Hãy sử dụng các ví dụ tương tự như trênimport tracebackdef f4[key]:
try:
d = {'a': 1, 'b': 2}
return d[key]
except Exception as e:
e = traceback.format_exc[]
print['Error: ', e]f4['c']
Sử dụng truy nguyên giúp chúng tôi in thêm thông tin về lỗi, vì vậy chúng tôi sẽ dễ dàng khắc phục sự cố hơn. Tuy nhiên, chúng ta cần nhập thêm một thư viện và viết thêm mã để làm điều này
Chỉ cần suy nghĩ hai lần về việc liệu nó có đáng để làm điều này không?
Giải pháp 0. Đừng Bắt NóẢnh của lechenie-narkomanii trên Pixabay
Phần này được thêm vào chỉ trong trường hợp ai đó sẽ nói điều gì đó như
tại sao sử dụng nâng cao hoặc khẳng định?
Thật vậy, đây là những gì tôi muốn nói trong bài viết này. Nó chính xác là giải pháp cho tiêu đề “Đừng lạm dụng try…ngoại trừ… trong Python”. Lý do mà tôi đưa ra hai “giải pháp” dưới đây chỉ là muốn chứng minh đâu là cách tốt.
Giải pháp 1. Tăng ngoại lệẢnh của Pezibear trên Pixabay
Như tôi đã nói trước đó, chúng ta nên tránh sử dụng quá nhiều try…ngoại trừ…có thể che giấu các ngoại lệ. Ngược lại, chúng tôi muốn tiết lộ ngoại lệ càng nhiều càng tốt. Sử dụng
num1 = f1[5]
num2 = f2['5']
num3 = f3[5]
1 để tăng ngoại lệ theo cách thủ công là một trong những cách tốtHãy sửa đổi các hàm
num1 = f1[5]
num2 = f2['5']
num3 = f3[5]
2, num1 = f1[5]
num2 = f2['5']
num3 = f3[5]
3 và num1 = f1[5]
num2 = f2['5']
num3 = f3[5]
4 của chúng tanum1 = f1[5]
num2 = f2['5']
num3 = f3[5]
0Ở đây, chúng tôi đã định nghĩa một ngoại lệ và đưa ra ngoại lệ đó trong các hàm khi loại đối số được truyền vào không phải là số nguyên
Sau đó, hãy chạy cùng một mã để sử dụng các chức năng này
num1 = f1[5]
num2 = f2['5']
num3 = f3[5]
Sẽ không quá tệ khi gặp lỗi nếu nó cho bạn biết chính xác lỗi đó là gì và lỗi đó xảy ra ở đâu
Giải pháp 2. Quả quyếtẢnh của aitoff trên Pixabay
Mặc dù khẳng định thường được sử dụng nhiều hơn trong thử nghiệm, chúng tôi vẫn có thể sử dụng nó trong quá trình phát triển để đảm bảo rằng mã của chúng tôi có ít lỗi hơn. Ngoài ra, việc sử dụng xác nhận thường gọn gàng hơn là đưa ra một ngoại lệ, nếu chúng ta không quan tâm loại ngoại lệ chính xác là gì
num1 = f1[5]
num2 = f2['5']
num3 = f3[5]
2Tóm lược
Ảnh của pasja1000 trên Pixabay
Thật tốt khi biết thêm các thủ thuật trong ngôn ngữ lập trình. Tôi phải nói rằng bất cứ khi nào tôi biết một cái gì đó hay ho, tôi cũng sẽ có xu hướng sử dụng nó. Tuy nhiên, cũng cần phải suy nghĩ kỹ xem chúng ta có cần làm điều này không và liệu thủ thuật đó có mang lại cho chúng ta nhiều lợi ích hơn là những rào cản hay không.
Do đó, đừng đặt tất cả mã của bạn vào khối try…ngoại trừ… trong Python. Hãy để lỗi bộc lộ và làm cho cuộc sống của chúng ta dễ dàng hơn
Tham gia Medium với liên kết giới thiệu của tôi — Christopher Tao
Là thành viên Phương tiện, một phần phí thành viên của bạn sẽ được chuyển đến các tác giả mà bạn đã đọc và bạn có toàn quyền truy cập vào mọi câu chuyện…
Trung bình. com
Nếu bạn cảm thấy bài viết của tôi hữu ích, hãy cân nhắc tham gia Medium Membership để ủng hộ tôi và hàng ngàn người viết khác. [Nhấp vào liên kết ở trên]