在基于Python的解析器中引发SyntaxError

时间:2014-06-04 12:39:04

标签: python parsing

我正在编写一个基于Python的解析器,它可以理解我们使用的一些配置文件。这些文件基本上由(名称,类型)和(名称,值)对组成:

参数文件:

# defines a field called some_bool of type boolean
some_bool : bool

配置文件:

# assigns True to some_bool
some_bool = bool

当我在解析的文件中遇到语法错误时,我不确定该怎么办:

# bol instead of bool
some_bool : bol

在这种情况下引发SyntaxError异常是不好的形式,还是更好的语法错误,以便在Python代码中显示问题?

2 个答案:

答案 0 :(得分:1)

使用SyntaxError可能会造成混淆。我要么创建一些特殊的例外类型,例如。 ParseError或忽略给定的值,只需登录为警告

答案 1 :(得分:0)

语法错误可能令人困惑,但在我被说服之前我需要进一步论证这是在这些情况下不使用它的一个很好的理由。 IMO使用不同类型的例外同样或更加困惑。

即使在解析(例如)特定于域的代码时可能会感到困惑,我们肯定可以在错误消息中明确指出它是具有错误的特定于域的语言,而不是Python源代码。

此外,SyntaxError为行号和文件名提供现成的字段。滚动你自己的SyntaxError需要重新发明这些轮子。

接受的答案here

  

使用最具特异性的Exception构造函数,它在语义上适合您的问题。

...解析时遇到的错误是(语义上)SyntaxError。

我的直觉是,在这种情况下,明确构造的SyntaxError是正确的。这也是公认的答案here

有人能说服我吗?