解析配置或 XML 文件有哪些可能的例外

what are the possible exceptions for parsing a config or xml file?

本文关键字:配置 XML 文件      更新时间:2023-10-16

如何处理解析文件时所有可能的异常?

我的代码有一个抽象基类和两个派生类(XML 和 config),具体取决于我编写的用于解析的代码的文件类型。

我只有一个例外:

#include <stdexcept>
namespace MyNameSpace
{
    class ParserException: public std::runtime_error
    {
        public:
            ParserException(std::string const& msg)
                : runtime_error(msg)
            {}
    };
};

如果有问题,只需抛出带有适当错误消息的解析器异常。如果存在一种特殊情况,用户实际上会从中恢复,那么请为这种情况创建一个特定的异常(派生自 ParserException)。

  • 不要为每个错误创建新的异常类。
  • 如果您确实为解析器创建了更多异常。然后从 ParserException 派生它们,以便它们可以作为一个组进行处理。
  • 如果发生一些通用的事情。使用标准例外之一。

用法:

if (bad)
{   throw ParserException("Something Bad Happened");
}

一定有很多例外,其中许多可能不太可能发生,但显而易见的可能是:

  • 文件中没有数据(无论出于何种原因无法加载)
  • 无效的 XML
  • 意外的数据格式(尽管这应该通过正确的解析来处理)
  • XML 中的非法字符(未正确转义)
  • 数据中的扩展 Unicode 字符(应在解析中优雅地处理)
  • 解析器内存不足

这是一个开始...!