Python3.8 Win下ConfigParser取配置报[Errno 11001] getaddrinfo failed如何解决
问题原因及解决方案
根因分析
该报错是DNS域名解析失败导致的,直接传入字符串正常、读取配置传入报错的核心原因有两类:
- 读取到的host值首尾存在不可见字符:Windows系统的换行符为
\r\n、部分编辑器保存配置时会在配置项末尾追加空格/回车、或者配置文件带UTF-8 BOM头,都会导致ConfigParser读取到的host字符串包含肉眼不可见的特殊字符。普通打印逻辑不会显示这些特殊字符,所以看起来和正常地址一致,但传入域名解析逻辑时会被当做地址的一部分,导致解析失败。 - 配置文件编码不匹配:ConfigParser的
read方法在Windows系统下默认采用系统编码(通常是GBK),如果你的config.ini是按UTF-8编码保存的,就会出现读取编码异常,导致字符串乱码无法解析。
解决方案
- 先确认是否存在不可见字符,在读取host后添加校验逻辑:
host = self._config.get('imap', 'host') print(repr(host)) # repr会转义显示所有不可见字符,比如末尾的回车会显示为\r print(len(host), len("实际的IMAP地址字符串")) # 对比二者长度是否一致
- 确认存在首尾空白/不可见字符的话,调用
strip()方法清理即可:
self._mail = imaplib.IMAP4_SSL(self._config.get('imap', 'host').strip(), 993)
- 如果是编码不匹配问题,给
read方法指定正确的编码:
# 按你的配置文件实际编码填写,常见为utf-8或gbk self._config.read('config.ini', encoding='utf-8')
- 额外排查:可将配置文件路径改为绝对路径读取,避免Windows下工作目录偏移读取到错误的配置文件。
内容的提问来源于stack exchange,提问作者TehPirate
相关产品推荐
相关产品推荐

