為什么我不能通過 sqlite3 python 中的 try/except 語法捕獲 OperationalError/DatabaseError?
我還使用“from sqlite3 import OperationalError”匯入了這些錯誤。
我正在運行的代碼是:
import pandas as pd
import sqlite3
from sqlite3 import OperationalError
from sqlite3 import DatabaseError
con = sqlite3.connect(r'F:\ANALIS\FIXD_INC\PRODUCTS\FI_Daily\new_db\DB\main.db')
try:
table = pd.read_sql("""SELECT * FROM giberish;""", con=con)
except (OperationalError, DatabaseError):
table = None
注意資料庫檔案(.db)可以是任何目錄,但它不包含表“giberish”。所以預計會發生錯誤。我的目標是學會正確處理它。
輸出如下:
OperationalError Traceback (most recent call last)
~\Anaconda3\lib\site-packages\pandas\io\sql.py in execute(self, *args, **kwargs)
2019 try:
-> 2020 cur.execute(*args, **kwargs)
2021 return cur
OperationalError: no such table: giberish
The above exception was the direct cause of the following exception:
DatabaseError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_10372/402971868.py in <module>
1 try:
----> 2 table = pd.read_sql("""SELECT * FROM giberish;""", con=con)
3 except (OperationalError, DatabaseError):
4 table = None
~\Anaconda3\lib\site-packages\pandas\io\sql.py in read_sql(sql, con, index_col, coerce_float, params, parse_dates, columns, chunksize)
564
565 if isinstance(pandas_sql, SQLiteDatabase):
--> 566 return pandas_sql.read_query(
567 sql,
568 index_col=index_col,
~\Anaconda3\lib\site-packages\pandas\io\sql.py in read_query(self, sql, index_col, coerce_float, params, parse_dates, chunksize, dtype)
2078
2079 args = _convert_params(sql, params)
-> 2080 cursor = self.execute(*args)
2081 columns = [col_desc[0] for col_desc in cursor.description]
2082
~\Anaconda3\lib\site-packages\pandas\io\sql.py in execute(self, *args, **kwargs)
2030
2031 ex = DatabaseError(f"Execution failed on sql '{args[0]}': {exc}")
-> 2032 raise ex from exc
2033
2034 @staticmethod
DatabaseError: Execution failed on sql 'SELECT * FROM giberish;': no such table: giberish
還想問我應該使用哪個錯誤 DatabaseError 或 OperationalError?我在代碼中都指定了它們,以確保問題不在錯誤名稱中。
uj5u.com熱心網友回復:
您需要捕獲 pandas 資料庫錯誤。當您進行 pandas 呼叫時,捕獲 pandas 錯誤。sqlite3 錯誤應該在直接呼叫 sqlite3 時處理。因此,從 pandas 匯入 DatabaseError,而不是 sqlite3:
from pandas.io.sql import DatabaseError
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/521417.html
上一篇:Javascript多輸入名稱值
