虽然在配置解析器中捕获到异常,但错误回溯在python中显示

时间:2017-03-27 10:40:10

标签: python exception-handling configparser

我从配置文件中获取值。为了确保我的程序处理可能发生的任何异常,我在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,以确保它是否只运行   进一步,但这可能不是解决方案,因为我有   做头的例外,解决这个问题的最佳方法是什么   问题

1 个答案:

答案 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)

我希望这是正确的做法