|
Size: 1590
Comment:
|
← Revision 6 as of 2023-01-07 04:01:52 ⇥
Size: 1759
Comment:
|
| Deletions are marked like this. | Additions are marked like this. |
| Line 1: | Line 1: |
| ## page was renamed from Python/ContextManagers = Python Context Managers = |
= Python Context Manager = |
| Line 4: | Line 3: |
| A '''context manager''' is an object that forms a scope inside a `with` block. | A '''context manager''' is an object that forms a scope inside a `with` block. This is useful for giving access to an externally-managed resource while gracefully handling errors. See also [[Python/ContextLib|contextlib]], a module for working with context managers. <<TableOfContents>> |
| Line 50: | Line 53: |
| == Usage == | == Definition == |
Python Context Manager
A context manager is an object that forms a scope inside a with block. This is useful for giving access to an externally-managed resource while gracefully handling errors.
See also contextlib, a module for working with context managers.
Contents
Example
import sqlite3
from pprint import pprint
from types import TracebackType
class Database(object):
def __init__(self, cursor: sqlite3.Cursor) -> None:
self._cursor = cursor
def execute(self, cmd: str, vals: Tuple = tuple()) -> List:
self._cursor.execute(cmd, vals)
return self._cursor.fetchall()
class database_connection(object):
def __init__(self, filename: str) -> None:
self._connect = sqlite3.connect(filename, detect_types=sqlite3.PARSE_DECLTYPES)
self._cursor = self._connect.cursor()
def __enter__(self) -> sqlite3.Cursor:
return Database(self._cursor)
def __exit__(self, typ: type[BaseException] | None, exc: BaseException | None, tb: TracebackType | None) -> bool:
self._connect.commit()
self._cursor.close()
self._connect.close()
with database_connection(":memory:") as db:
db.execute("CREATE TABLE mytable (num INTEGER, name TEXT)")
for n in range(10):
db.execute("INSERT INTO mytable (num,name) VALUES (?,?)", (n,str(n)))
data = db.execute("SELECT * FROM mytable")
pprint(data)
Definition
A context manager needs to define an __enter__ function and an __exit__ function.
The __exit__ function is called if an error raises. To suppress errors, have it return True.
