python ConfigParser

本文档介绍了使用Python的ConfigParser模块时遇到的两个常见问题及其解决方案。第一个问题是由于BOM编码导致的UnicodeDecodeError,通过指定'utf-8-sig'编码可以解决。第二个问题是ConfigParser在处理包含特殊符号%的配置项时出现的InterpolationSyntaxError,通过使用RawConfigParser或异常处理避免该错误。
摘要由CSDN通过智能技术生成

问题:

>>> import configparser
>>> parser=configparser.ConfigParser()
>>> con=parser.read("Chinese.ini")
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    con=parser.read("Chinese.ini")
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\configparser.py", line 697, in read
    self._read(fp, filename)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\configparser.py", line 1015, in _read
    for lineno, line in enumerate(fp, start=1):
UnicodeDecodeError: 'gbk' codec can't decode byte 0xad in position 21: illegal multibyte sequence

原因关键字:BOM,\ufeff
解决:

>>> con=parser.read("Chinese.ini",encoding="utf-8-sig")

参考资料来源:今天忘记记录,下次再记录算了。

***************************************************************************************************************************

问题:

>>> for sect in parser.sections():
    print("==============={}==============".format(sect))
    for opt in parser.options(sect):
        s=parser.get(sect,opt)
        print("{}={}".format(opt,s))

Traceback (most recent call last):
  File "<pyshell#40>", line 4, in <module>
    s=parser.get(sect,opt)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\configparser.py", line 800, in get
    d)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\configparser.py", line 394, in before_get
    self._interpolate_some(parser, option, L, value, section, defaults, 1)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\configparser.py", line 444, in _interpolate_some
    "found: %r" % (rest,))
configparser.InterpolationSyntaxError: '%' must be followed by '%' or '(', found: '%d 人的未限制點播房間)'

原因关键字:特殊符号%,get

改进:

>>> for sect in parser.sections():
    print("==============={}==============".format(sect))
    for opt in parser.options(sect):
        try:
            s=parser.get(sect,opt)
        except:
            print("{}-->{} error! passed..".format(sect,opt))
        print("{}={}".format(opt,s))

最终:

>>> parser=configparser.RawConfigParser()

>>> parser.read("Chinese.ini",encoding="utf-8-sig")
['Chinese.ini']
>>> for sect in parser.sections():
    print("==============={}==============".format(sect))
    for opt in parser.options(sect):
        s=parser.get(sect,opt)
        print("{}={}".format(opt,s))

参考资料来源:--

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值