使用本地包相对导入时ConfigParser无法读取文件
问题:配置文件读取失败,提示Section db_info未找到
错误回溯信息
Traceback (most recent call last): File "F:\Coding\user.py", line 2, in <module> from db_handler.handler import check File "F:\Coding\db_handler\handler.py", line 14, in <module> params = db_config() ^^^^^^^^^^^ File "F:\Coding\db_handler\config.py", line 22, in db_config raise Exception('Section {0} not found in the {1} file'.format(section, filename)) Exception: Section db_info not found in the config.ini file
项目文件结构
├db_handler | └───config.ini | └───config.py | └───handler.py | └───__init__.py ├user.py
各文件内容
config.ini
[db_info] host=somesite.com database=profiles user=hilfing password=pass port=5432
config.py
def db_config(filename='config.ini', section='db_info'): # create a parser parser = ConfigParser() # read config file parser.read(filename) db = {} if parser.has_section(section): params = parser.items(section) for param in params: db[param[0]] = param[1] else: raise Exception('Section {0} not found in the {1} file'.format(section, filename)) return db
handler.py
import psycopg2 from .config import db_config # read connection parameters params = db_config() # connect to the PostgreSQL server try: conn = psycopg2.connect(**params) except (Exception, psycopg2.DatabaseError) as error: print(error)
user.py
from db_handler.handler import check c = check() print(c) #Other code...
已尝试的解决方法
- 给config.py中的filename参数添加
.或./前缀,问题未解决 - 将handler.py中的相对导入
from .config import db_config改为import config,单独运行handler.py时有效,但从user.py导入整个包时出错
最终解决办法
将db_handler目录下的config.ini移动到项目根目录(与user.py同级)即可正常读取配置。
内容的提问来源于stack exchange,提问作者HilFing_Real
相关产品推荐
相关产品推荐

