如何正确捕获另一个 class 的异常?
How to properly catch exceptions from another class?
假设我们在 python 模块中有这个方法
A.py
class Database():
#..../init, etc
def bulk_insert_query(self, query, dataset: typing.Tuple) -> None:
try:
stmt = ibm_db.prepare(self._conn, query)
ibm_db.execute_many(stmt, dataset)
logging.info("Bulk insert executed successfully.")
except Exception as e:
logging.exception(f"Bulk insert failed: {e}")
我在另一个 python 模块中调用这个方法
B.py
import a.Database
db = a.Database()
try:
db.bulk_insert_query(query = query, dataset = data_to_load)
except:
sys.exit()
我想要实现的是当 a.bulk_insert_query() 由于某种原因(sys.exit() 到 运行)失败时停止执行。
我不想将 sys.exit() 写入数据库 class,因为它被其他方法使用,我不应在出现错误时退出。
所以我很好奇在数据库 class 中引发异常并在其他模块中使用 try + except 捕获该异常的最 pythonic 方法。
我知道我可以使用 raise 来传递异常,但我不确定在 try - except 块中使用它是否有意义。
在 except
块中,不带参数的 raise
语句将简单地 re-raise 捕获异常,以便它可以被调用者捕获和处理。
except Exception as e:
logging.exception(f"Bulk insert failed: {e}")
raise
Re-raising这种情况比较常见。
假设我们在 python 模块中有这个方法
A.py
class Database():
#..../init, etc
def bulk_insert_query(self, query, dataset: typing.Tuple) -> None:
try:
stmt = ibm_db.prepare(self._conn, query)
ibm_db.execute_many(stmt, dataset)
logging.info("Bulk insert executed successfully.")
except Exception as e:
logging.exception(f"Bulk insert failed: {e}")
我在另一个 python 模块中调用这个方法
B.py
import a.Database
db = a.Database()
try:
db.bulk_insert_query(query = query, dataset = data_to_load)
except:
sys.exit()
我想要实现的是当 a.bulk_insert_query() 由于某种原因(sys.exit() 到 运行)失败时停止执行。 我不想将 sys.exit() 写入数据库 class,因为它被其他方法使用,我不应在出现错误时退出。 所以我很好奇在数据库 class 中引发异常并在其他模块中使用 try + except 捕获该异常的最 pythonic 方法。 我知道我可以使用 raise 来传递异常,但我不确定在 try - except 块中使用它是否有意义。
在 except
块中,不带参数的 raise
语句将简单地 re-raise 捕获异常,以便它可以被调用者捕获和处理。
except Exception as e:
logging.exception(f"Bulk insert failed: {e}")
raise
Re-raising这种情况比较常见。