[英]Organizing optional imports in Python
我正在研究一個涉及編寫數據的Python 3項目。 現在,我希望用戶能夠選擇要寫入的數據格式 - pickle,SQLite,PostgreSQL等。那么,pickle和sqlite支持內置於Python中,所以不用擔心。 但是,其他東西需要導入其他模塊。
該項目沒有進入不必要的細節,包括以下內容:一個類ProjectClass
,它具有read
, write
等方法,將數據寫入列,創建新列等。因此用戶在創建對象時選擇后端。 ProjectClass
類型:
from project import ProjectClass
instance = ProjectClass(backend='MySQL')
instance.write(column_name='column1', data=some_data)
並且后端處理所有數據庫內容(因此ProjectClass
與數據庫無關)。 read
, write
和其他方法從backends.py
調用函數,它們調用的函數取決於創建時傳遞給ProjectClass
實例的后端類型。
現在,我無法完全理解如何:
psycopg2
等) 我應該將后端拆分為每個數據庫類型的單獨文件,當用戶創建ProjectType
實例時,它會嘗試導入必要的文件(PostgreSQL的postgresqlbackend.py
,MySQL的mysqlbackend.py
等)並查看是否導入失敗(由於缺少在<backendname>backend.py
文件中導入的包)?
我應該將后端拆分為每種數據庫類型的單獨文件,當用戶創建ProjectType實例時,它會嘗試導入必要的文件
這聽起來是個好主意。 不要忘記,您也可以在任何地方導入模塊(它可以在函數內部 - 它不需要位於文件的頂部)。 然后,您可以使用try/except
包圍此import
語句,並事先警告用戶。
try:
import non_existant_module
except ImportError as e:
print e.message # prints "No module named non_existant_module"
最好的方法IMO是在加載運行時配置后首次啟動程序時打印此錯誤,指定將使用哪個模塊/數據庫類型。 這樣,用戶立即得到通知。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.