Traffine I/O

Bahasa Indonesia

2023-03-31

contextlib.ExitStack

Apa itu ExitStack

Modul contextlib pada Python menyediakan pengelola konteks yang serbaguna yang disebut ExitStack, yang menyederhanakan pengelolaan beberapa pengelola konteks dan alokasi resource secara dinamis. ExitStack dapat digunakan untuk mengelola sejumlah pengelola konteks dan operasi pembersihan, menjadikannya alat yang berharga untuk berbagai skenario.

Pengelola konteks ExitStack dirancang untuk menangani tugas pembersihan resource secara LIFO (Last In, First Out). Saat digunakan dengan pernyataan with, ExitStack memastikan bahwa semua resource yang terdaftar dibersihkan dengan benar, bahkan dalam menghadapi pengecualian.

Bekerja dengan ExitStack

Manajemen File Sederhana

Menggunakan ExitStack dapat menyederhanakan tugas manajemen file saat bekerja dengan beberapa file. Pertimbangkan contoh berikut, di mana Anda perlu membaca dari dua file masukan dan menulis ke file keluaran:

python
from contextlib import ExitStack

with ExitStack() as stack:
    input_file1 = stack.enter_context(open('input1.txt', 'r'))
    input_file2 = stack.enter_context(open('input2.txt', 'r'))
    output_file = stack.enter_context(open('output.txt', 'w'))

    # Perform operations with the files

Dalam contoh ini, ExitStack memastikan bahwa semua file ditutup dengan benar, bahkan jika pengecualian terjadi saat membaca atau menulis.

Mengelola Beberapa Pengelola Konteks

ExitStack sangat berguna ketika Anda perlu mengelola beberapa pengelola konteks secara simultan. Misalnya, saat bekerja dengan kombinasi file, soket, dan kunci, Anda dapat menggunakan ExitStack untuk menangani semua resource dalam satu pernyataan with:

python
from contextlib import ExitStack
from threading import Lock

with ExitStack() as stack:
    file1 = stack.enter_context(open('file1.txt', 'r'))
    file2 = stack.enter_context(open('file2.txt', 'w'))
    lock = stack.enter_context(Lock())

    # Perform operations with the files and lock

Manajemen Konteks Dinamis

ExitStack memungkinkan Anda untuk mengelola resource secara dinamis, bahkan jika jumlah pengelola konteks tidak diketahui sebelumnya. Misalnya, jika Anda memiliki daftar nama file dan perlu membuka semuanya untuk dibaca:

python
from contextlib import ExitStack

file_names = ['file1.txt', 'file2.txt', 'file3.txt']

with ExitStack() as stack:
    files = [stack.enter_context(open(file_name, 'r')) for file_name in file_names]

    # Perform operations with the opened files

Penanganan Pengecualian dengan ExitStack

ExitStack dapat digunakan untuk menangani pengecualian dengan mulus saat bekerja dengan beberapa pengelola konteks:

python
from contextlib import ExitStack

try:
    with ExitStack() as stack:
        file1 = stack.enter_context(open('file1.txt', 'r'))
        file2 = stack.enter_context(open('non_existent_file.txt', 'r'))
except FileNotFoundError:
    print("One of the files could not be found.")

Dalam contoh ini, jika pengecualian terjadi saat membuka salah satu file, ExitStack memastikan bahwa file yang sudah dibuka ditutup sebelum menyebar pengecualian.

Referensi

https://docs.python.org/3/library/contextlib.html#contextlib.ExitStack

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!