[英]Python2 porting to Python3: ConfigParser Exceptions - AttributeError on MissingSectionHeaderError
我正在尝试将 Python2.7 脚本移植到 Python3.6+ 并且遇到了我的谷歌搜索无法解决的障碍。 问题是,在做了一些初始移植建议之后,下面的 try: except: call 似乎不起作用。 我敢肯定这很简单; 只是此刻逃脱了我。
Python2.7代码:(工作)
import ConfigParser
logOutCfg = ConfigParser.ConfigParser()
try:
if (os.path.isfile(logOutfilename)) : logOutCfg.read(logOutfilename)
except ConfigParser.MissingSectionHeaderError as e:
pass
except ConfigParser.ParsingError as e:
print(str(e))
pass
Python3.6尝试的代码(在 Python 2.7 下不起作用):
from configparser import ConfigParser
logOutCfg = ConfigParser()
try:
if (os.path.isfile(logOutfilename)) : logOutCfg.read(logOutfilename)
except ConfigParser.MissingSectionHeaderError as e:
pass
except ConfigParser.ParsingError as e:
print(str(e))
pass
脚本在Python2下运行报错为:
File "<script>.py", line 242, in <function>
except ConfigParser.MissingSectionHeaderError:
AttributeError: type object 'ConfigParser' has no attribute 'MissingSectionHeaderError'
我很确定我尝试了很多不同的东西。 包括: except configparser.MissingSectionHeaderError
但没有喜悦。
我错过了什么? 在可预见的未来……至少在接下来的 9 个月内,我需要代码在 Python2 和 Python3 中工作。
@mkrieger1 是对的。 关键是还要导入 configparser
import configparser
from configparser import ConfigParser
logOutCfg = ConfigParser()
try:
if (os.path.isfile(logOutfilename)) : logOutCfg.read(logOutfilename)
except configparser.MissingSectionHeaderError as e:
pass
except configparser.ParsingError as e:
print(str(e))
pass
您的 Python 3.6 代码大部分是正确的。 唯一的问题是您试图从ConfigParser
class 而不是configparser
模块中获取异常。 这里的主要混淆很可能来自于模块名称在 Python 3 中更改为更符合PEP8 标准的事实。 最初, ConfigParser
模块和 class 共享相同的名称,但在 Python 3 中并非如此。
下面的代码应该在 Python 2 和 3 中工作。
try:
import configparser
except ImportError:
import ConfigParser as configparser
logOutCfg = configparser.ConfigParser()
try:
if (os.path.isfile(logOutfilename)):
logOutCfg.read(logOutfilename)
except configparser.MissingSectionHeaderError as e:
pass
except configparser.ParsingError as e:
print(e)
这是这里发生的事情的快速细分。
try:
import configparser
except ImportError:
import ConfigParser as configparser
尝试导入 Python 3 configparser
模块。 如果在 Python 2 中,这将引发ImportError
。 我们抓住了这一点,而是导入ConfigParser
并使用configparser
为其别名。
logOutCfg = configparser.ConfigParser()
从上面导入的configparser
模块中ConfigParser
class,并将其实例化。
try:
if (os.path.isfile(logOutfilename)):
logOutCfg.read(logOutfilename)
except configparser.MissingSectionHeaderError as e:
pass
except configparser.ParsingError as e:
print(e)
尝试像以前一样打开文件,但不要尝试从ConfigParser
class 获取异常,而是从configparser
模块获取它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.