On 1/16/2017 1:06 PM, Israel Brewster wrote:
I generally use context managers for my SQL database connections, so I can just
write code like:
with psql_cursor() as cursor:
<do whatever>
And the context manager takes care of making a connection (or getting a
connection from a pool, more likely), and cleaning up after the fact (such as
putting the connection back in the pool), even if something goes wrong. Simple,
elegant, and works well.
The problem is that, from time to time, I can't get a connection, the result
being that cursor is None,
This would be like open('bad file') returning None instead of raising
FileNotFoundError.
and attempting to use it results in an AttributeError.
Just as None.read would.
Actually, I have to wonder about your claim. The with statement would
look for cursor.__enter__ and then cursor.__exit__, and None does not
have those methods. In other words, the expression following 'with'
must evaluate to a context manager and None is not a context manager.
>>> with None: pass
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
with None: pass
AttributeError: __enter__
Is psql_cursor() returning a fake None object with __enter__ and
__exit__ methods?
--
Terry Jan Reedy
--
https://mail.python.org/mailman/listinfo/python-list