我从配置文件中获取值。为了确保我的程序处理可能发生的任何异常,我在try除了块之外进行了配置读取操作,如下所示:
def __getConfigDetails(self):
try:
self.username = config.get("plugin_haproxy", 'user')
self.hostname = config.get("plugin_haproxy", 'host')
self.filelocation = config.get("plugin_haproxy", 'filepath')
except ConfigParser.NoOptionError as error:
logging.error(error)
print "Error in options Name", error
except ConfigParser.NoSectionError as error:
logging.error(error)
print "Error in sections Name", error
在获取详细信息后,我调用另一个需要上述值作为参数的函数。我们知道其中一个值当然不可用,但我们如何处理这种情况,为什么不处理它的例外
self.executeCommand(self.username, self.hostname, self.filelocation)
该程序运行良好,但假设用户更改了配置文件中的选项并将用户更改为用户名当然,由于我们正在处理 ConfigParser.NoOptionError <,因此该方法可以处理它。 / strong>例外。
这里,在我的程序中它抛出异常,但也抛出错误回溯,如下所示,
Traceback (most recent call last):
File "main.py", line 67, in <module>
main()
File "main.py", line 59, in main
cons.PLUGIN_CONFIG_PATH, finaloutput, finallogs)
File "/home/tara/taraproject/checkaccessEnv/project2/plugins/plugin_haproxy/plugin_haproxy.py", line 51, in run
self.__getConfigDetails()
File "/home/tara/taraproject/checkaccessEnv/project2/plugins/plugin_haproxy/plugin_haproxy.py", line 23, in __getConfigDetails
self.username = config.get("plugin_haproxy", 'user')
File "/usr/lib/python2.7/ConfigParser.py", line 340, in get
raise NoOptionError(option, section)
ConfigParser.NoOptionError: No option 'user' in section: 'plugin_haproxy'
我只想要显示例外打印,为什么会这样?
我知道我可以通过使用if子句来处理这种情况 第二个函数,即__executeCommand,以确保它是否只运行 进一步,但这可能不是解决方案,因为我有 做头的例外,解决这个问题的最佳方法是什么 问题
答案 0 :(得分:0)
问题是 发生异常和我获取配置值的try块无法获取它,因为它没有执行,接下来我调用函数 **
self.executeCommand(self.username,self.hostname,self.filelocation)
参数没有设置值,因此错误发生在前面的函数中 def __getConfigDetails(self):我添加了sys.exit(),如下所示。
def __getConfigDetails(self):
try:
self.username = config.get("plugin_haproxy", 'user')
self.hostname = config.get("plugin_haproxy", 'host')
self.filelocation = config.get("plugin_haproxy", 'filepath')
logging.info('Config Read Success')
except ConfigParser.NoOptionError as error:
logging.exception(error)
print "Error in options Name", error
sys.exit(1)
except ConfigParser.NoSectionError as error:
logging.error(error)
print "Error in sections Name", error
sys.exit(1)
我希望这是正确的做法