Bạn có cần ngoại trừ sau khi thử python không?

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ày

def 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ên

import 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ốt

Hã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 ta

num1 = 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]
2

Tó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]

Python có thử yêu cầu ngoại trừ không?

Câu lệnh Try-Except là một khối mã cho phép chương trình của bạn thực hiện các hành động thay thế trong trường hợp xảy ra lỗi. Trước tiên, Python sẽ cố gắng thực thi mã trong câu lệnh thử [khối mã 1]. Nếu không có ngoại lệ xảy ra, câu lệnh except sẽ bị bỏ qua và quá trình thực thi câu lệnh try kết thúc .

Tôi có thể sử dụng cái gì thay vì ngoại trừ trong Python?

ngoại trừ. để xử lý các ngoại lệ. Thay vào đó, thư viện contextlib tích hợp sẵn của Python cung cấp một hàm gọi là suppress để xử lý việc này một cách tinh tế hơn.

Chủ Đề