Đây có phải là cách đúng đắn để sử dụng python "với" tuyên bố kết hợp với một thử-trừ khối ?:Sử dụng python "với" tuyên bố với thử-trừ khối
try:
with open("file", "r") as f:
line = f.readline()
except IOError:
<whatever>
Nếu nó được, sau đó xem xét cách làm cũ:
try:
f = open("file", "r")
line = f.readline()
except IOError:
<whatever>
finally:
f.close()
Lợi ích chính của câu lệnh "có" ở đây là chúng ta có thể loại bỏ ba dòng mã? Nó không có vẻ hấp dẫn đối với tôi cho trường hợp sử dụng này (mặc dù tôi hiểu rằng câu lệnh "có" có các mục đích sử dụng khác).
CHỈNH SỬA: Chức năng của hai khối mã trên giống hệt nhau không?
EDIT2: Một vài câu trả lời đầu tiên nói chung về lợi ích của việc sử dụng "bằng", nhưng những câu hỏi đó có vẻ như có lợi ích cận biên ở đây. Tất cả chúng ta đều (hoặc lẽ ra phải) đã gọi rõ ràng f.close() trong nhiều năm. Tôi cho rằng một lợi ích là các lập trình viên cẩu thả sẽ được hưởng lợi từ việc sử dụng "với".
có thể trùng lặp của [Bắt một ngoại lệ khi sử dụng Python 'với' tuyên bố] (http://stackoverflow.com/questions/713794/catching -an-exception-while-using-a-python-with-statement) –