我想用“with as statament”来启动我的类(class)。我正在使用 pyodbc 模块连接 mssql。
import pyodbc
class Db:
DRIVER = r'DRIVER={ODBC Driver 13 for SQL Server};'
SERVER = r'SERVER=192.168.1.1,1433;'
DATABASE = r'DATABASE=Client;'
USERNAME = r'UID=sa;'
PASSWORD = r'PWD=1'
def __init__(self):
self.cnxn = pyodbc.connect(self.DRIVER + self.SERVER + self.DATABASE + self.USERNAME + self.PASSWORD)
self.cursor = self.cnxn.cursor()
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
print("__exit__")
self.cursor.close()
self.cnxn.close()
with Db() as d:
print(d)
上面的代码工作正常,但是当我更改服务器名称时,它崩溃了,我在控制台上看不到 print("exit")。
最佳答案
仅当进入 with
block 时才会调用 __exit__
方法。不是 with
语句,而是附加到它的代码块。
如果Db()
抛出异常,则__enter__
和__exit__
都不会被调用。如果你想一想,他们怎么可能呢? Db
对象从未成功构造,因此无法调用其方法。
关于Python 用 "with statement"编写我的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48209627/