如何正确捕获另一个 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这种情况比较常见。