Page 68 - Python Simple
P. 68
8. Lỗi và biệt lệ http://www.vithon.org/tutorial/2.5/node10.html
division by zero!
executing finally clause
>>> divide("2", "1")
executing finally clause
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<stdin>", line 3, in divide
TypeError: unsupported operand type(s) for /: 'str' and 'str'
Như bạn có thể thấy, vế finally được thực thi trong mọi trường hợp. TypeError được
nâng vì chia hai chuỗi không được xử lý bởi vế except và vì thế nên được nâng lại sau
khi vế finally đã được thực thi.
Trong các ứng dụng thực thế, vế finally được dùng để trả lại những tài nguyên
ngoài (như tập tin, hoặc kết nối mạng), cho dù việc sử dụng tài nguyên có thành
công hay không.
8.7 Định nghĩa xử lý có sẵn
Một số đối tượng định nghĩa các tác vụ dọn dẹp chuẩn để thực thi khi một đối tượng
không còn được cần đến, cho dù việc xử dụng đối tượng là thành công hay thất bại.
Xem qua ví dụ sau, nó thử mở một tập tin và viết nội dung của nó ra màn hình.
for line in open("myfile.txt"):
print line
Vấn đề với đoạn mã trên là nó để tập tin ngỏ trong một thời gian không xác định sau
khi đoạn mã đã kết thúc. Đây không phải là vấn đề gì trong các đoạn kịch bản đơn
giản, nhưng có thể là một vấn đề phức tạp đối với các ứng dụng lớn hơn. Câu lệnh
with cho phép các đối tượng như tập tin được dùng theo một cách đảm bảo chúng sẽ
được dọn dẹp đúng lúc và đúng đắn.
with open("myfile.txt") as f:
for line in f:
print line
Sau khi câu lệnh được thực thi, tập tin f luôn được đóng lại, cho dù gặp phải vấn đề
trong khi xử lý các dòng. Các đối tượng khác mà cung cấp những tác vụ dọn dẹp định
nghĩa sẵn sẽ cho biết về điểm này trong tài liệu của chúng.
Phiên bản 2.5, tài liệu được cập nhật ngày 19, tháng 09, năm 2006.
Xem Về tài liệu này... về cách đề nghị thay đổi.
7 of 7 08/31/2011 10:27 AM