Xem thảo luận
Cải thiện bài viết
Lưu bài viết
Xem thảo luận
Cải thiện bài viết
Lưu bài viết
Đọc
Bàn luận
- Trình quản lý bối cảnh được sử dụng để quản lý tài nguyên được sử dụng bởi chương trình. Sau khi hoàn thành việc sử dụng, chúng tôi phải phát hành bộ nhớ và chấm dứt các kết nối giữa các tệp. Nếu chúng không được phát hành thì nó sẽ dẫn đến rò rỉ tài nguyên và có thể khiến hệ thống chậm lại hoặc sụp đổ. Ngay cả khi chúng tôi không phát hành tài nguyên, các nhà quản lý ngữ cảnh hoàn toàn thực hiện nhiệm vụ này.
Tham khảo bài viết dưới đây để có ý tưởng về những điều cơ bản của người quản lý bối cảnh.
Quản lý bối cảnh
__exit __ [] phương thức __exit__[self, exception_type, exception_value, exception_traceback]
Parameters:
- Đây là một phương pháp của lớp bối cảnh. Phương pháp __exit__ quan tâm đến việc phát hành các tài nguyên bị chiếm giữ với đoạn mã hiện tại. Phương pháp này phải được thực thi bất kể điều gì sau khi chúng ta được thực hiện với các tài nguyên. Phương pháp này chứa các hướng dẫn để đóng đúng trình xử lý tài nguyên để tài nguyên được giải phóng để sử dụng thêm bởi các chương trình khác trong HĐH. Nếu một ngoại lệ được nâng lên; Loại, giá trị và dấu vết của nó được truyền dưới dạng đối số cho __exit __ []. Nếu không, ba không có đối số được cung cấp. Nếu ngoại lệ bị triệt tiêu, thì giá trị trả về từ phương thức __exit __ [] sẽ đúng, nếu không, sai.indicates class of exception.
- Cú pháp: __exit __ [self, exican_type, offic_value, exican_traceBack] & nbsp; indicates type of exception . like divide_by_zero error, floating_point_error, which are types of arithmetic exception.
- Exception_Type: chỉ ra lớp ngoại lệ. & nbsp; traceback is a report which has all of the information needed to solve the exception.
Exception_Value: Cho biết loại ngoại lệ. Giống như lỗi Divide_by_zero, Floating_Point_error, là loại ngoại lệ số học. & NBSP;
Python3
Exception_TraceBack: Traceback là một báo cáo có tất cả thông tin cần thiết để giải quyết ngoại lệ.
# Ví dụ 1: & nbsp;
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero0
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero1
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero2
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero3
class
ContextManager[]:
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero0
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero1
class
2Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero3
def
__init__[
______7
def
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero6
self
__
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero0
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero1
ContextManager[]:
5Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero3
ContextManager[]:
7
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero0
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero1
1Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero3
class
5 self
init method called enter method called with statement block exit method called
def
class
9self
ContextManager[]:
1 Understanding parameters of __exit__[]. We will create a context manager that will be used to divide two numbers. If the
Python3
Đầu ra
# Ví dụ 2: Hiểu các tham số của __exit __ []. Chúng tôi sẽ tạo một trình quản lý bối cảnh sẽ được sử dụng để chia hai số. Nếu & nbsp;
class
4
def
__init__[
self
9
class
ContextManager[]:
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero0
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero1
__init__[
8Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero3
def
__init__[
______7
def
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero6
self
__
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero0
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero1
]:
1Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero3
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero0
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero1
]:
6]:
7
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero0
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero1
1
2
class
5 self
def
class
9self
ContextManager[]:
1
Đầu ra
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero11
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero12
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero13
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero14
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero15
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero17
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero0
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero1
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero20
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero3
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero11
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero12
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero13
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero25
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero15
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero17
Output:
Inside __enter__ 3.0 Inside __exit__ Execution type: None Execution value: None Traceback: None ................................................ Inside __enter__ Inside __exit__ Execution type: Execution value: division by zero Traceback: Traceback [most recent call last]: File "gfg.py", line 32, in r.divide_by_zero[] File "gfg.py", line 21, in divide_by_zero print[self.num1 / self.num2] ZeroDivisionError: division by zero