我有一个包,允许用户使用其中任何一个4个包连接到数据库。它的功能非常好,但我对导入方式不满意。
我可以简单地导入所有包,但我不想这样做,以防特定用户从未使用turbodbc等包:
我可以简单地导入所有包,但我不想这样做,以防特定用户从未使用turbodbc等包:
import pyodbc
import pymssql
import turbodbc
from ibmdbpy.base import IdaDataBase
目前,我的情况如下。我尝试导入所有内容,但是那些不能导入的,没有问题,我的程序会简单地假设它们不会被调用,如果被调用则会出错:
# some envs may not have all these packages installed so we try each:
try:
import pyodbc
except:
pass
try:
import pymssql
except:
pass
try:
import turbodbc
except:
pass
try:
from ibmdbpy.base import IdaDataBase
except:
pass
这不符合Python的风格。我知道有一些包,比如holoviews或tensorflow,允许您指定后端。当然,它们比我的复杂度高出数个数量级,但它们必须处理相同的模式。
我应该如何修改这段代码呢?从技术上讲,如果他们打算使用pyodbc
但没有安装它,我的程序将不会警告他们,而是在运行时出现错误。因此,这实际上超出了美学或哲学范畴;这是技术上容易出错的代码。
您会如何处理这种情况?
另外,以下是调用代码的示例:
connect('Playground', package='pymssql')
return locals()[f'use_{package}_db2']() if package in ['pyodbc','IdaDataBase'] and package is not None else raise ValueError(f'{package} module not imported. Please pip install.')
- MetaStack