Dưới đây là một ví dụ về việc sử dụng:
try:
with open('filename') as f:
do_stuff_that_depends_on_the_existence_of_the_file(f)
except IOError as e:
print 'Trouble opening file'
Nếu bạn đang mở tập tin với bất kỳ truy cập ở tất cả, sau đó hệ điều hành sẽ đảm bảo rằng các tập tin tồn tại, nếu không nó sẽ thất bại với một lỗi. Nếu quyền truy cập là độc quyền, bất kỳ quá trình tranh chấp nào khác cho tệp sẽ bị bạn chặn hoặc chặn bạn.
try
chỉ là một cách để phát hiện lỗi hoặc thành công của hành động mở tệp, vì tệp I/O API bằng Python thường không có mã trả về (ngoại lệ được sử dụng thay thế). Vì vậy, để thực sự trả lời câu hỏi của bạn, nó không phải là try
tránh điều kiện chủng tộc, đó là open
. Về cơ bản nó giống nhau trong C (dựa trên Python), nhưng không có ngoại lệ. Đọc this để biết thêm thông tin.
Lưu ý rằng bạn có thể muốn thực thi mã phụ thuộc vào quyền truy cập vào tệp bên trong khối thử. Khi bạn đóng tệp, sự tồn tại của nó sẽ không còn được đảm bảo nữa.
Gọi os.path.exists
chỉ cung cấp ảnh chụp nhanh tại một thời điểm khi tệp có thể tồn tại hoặc không tồn tại và bạn không biết gì về sự tồn tại của tệp khi trả lại os.path.exists
. Mã không hợp lệ hoặc logic không mong muốn có thể xóa hoặc thay đổi tệp khi bạn không mong đợi. Cũng giống như quay đầu để kiểm tra xem con đường có rõ ràng không trước khi lái xe vào đó. Một khi bạn quay đầu lại, bạn không có gì ngoài việc đoán về những gì đang diễn ra mà bạn không còn tìm kiếm nữa. Giữ tập tin mở đảm bảo một trạng thái nhất quán mở rộng, một cái gì đó không thể (cho tốt hay xấu) khi lái xe. :)
Đề xuất kiểm tra xem tệp không tồn tại thay vì sử dụng try/open
vẫn không đủ do bản chất chụp nhanh os.path.exists
. Thật không may tôi biết không có cách nào để ngăn chặn các tập tin được tạo ra trong một thư mục trong tất cả các trường hợp, vì vậy tôi nghĩ rằng tốt nhất là kiểm tra sự tồn tại tích cực của một tập tin, thay vì sự vắng mặt của nó.
Nguồn
2013-01-29 02:11:20
@downvoter - lý luận? Có vấn đề gì không? – Mike