Tôi đã có một hàm trả về một thành viên ngẫu nhiên của một số nhóm theo thứ tự ưu tiên. Nó đã đi một cái gì đó như thế này:Có một lựa chọn thay thế nào cho `ngoại trừ: pass` không?
def get_random_foo_or_bar():
"I'd rather have a foo than a bar."
if there_are_foos():
return get_random_foo()
if there_are_bars():
return get_random_bar()
raise IndexError, "No foos, no bars"
Tuy nhiên, điều đầu tiên get_random_foo
làm là xác minh có foos và nâng cao một IndexError
nếu không muốn nói, vì vậy there_are_foos
là không cần thiết. Hơn nữa, một cơ sở dữ liệu có liên quan và sử dụng các hàm riêng biệt tạo ra một vấn đề đồng thời. Theo đó, tôi viết lại nó một cái gì đó như thế này:
def get_random_foo_or_bar():
"Still prefer foos."
try:
return get_random_foo()
except IndexError:
pass
try:
return get_random_bar()
except IndexError:
pass
raise IndexError, "No foos, no bars"
Nhưng tôi tìm thấy điều này ít nhiều có thể đọc được, và như tôi đã không bao giờ có lý do để sử dụng pass
trước khi nó cảm thấy instictively sai.
Có mẫu hình hiệu quả hơn hay tôi nên học cách chấp nhận pass
?
Lưu ý: Tôi muốn tránh bất kỳ tổ nào vì các loại khác có thể được thêm vào sau.
Sửa
Cảm ơn tất cả những ai nói rằng pass
là tốt - đó là yên tâm!
Cũng nhờ những người đề xuất thay thế ngoại lệ với giá trị trả lại là None
. Tôi có thể thấy đây là một mô hình hữu ích như thế nào, nhưng tôi cho rằng đó là sai ngữ nghĩa trong tình huống này: các chức năng đã được yêu cầu thực hiện một nhiệm vụ bất khả thi để họ phải đưa ra một ngoại lệ. Tôi thích theo dõi hành vi của mô-đun random
(ví dụ: random.choice([])
).
Việc sử dụng trong 'báo cáo except' có lẽ là việc sử dụng phổ biến nhất của' pass' bằng Python. Vì vậy, tôi sẽ quen với nó. –
"Nhưng tôi thấy điều này ít dễ đọc hơn ... nó cảm thấy sai lầm một cách vô lý" - nghĩ về nó như một vấn đề văn hóa. Nó có vẻ lạ, nhưng đó là cách sạch nhất để sử dụng ngôn ngữ. – detly