用Python内置的SyntaxError
有什么意义?它似乎没有任何实际用途,因为SyntaxError
是由python解释器在运行之前发现的。示例:
try:
&@!5_+ #SyntaxError
except: pass
这以SyntaxError
失败,因为找到SyntaxError
才可以对其进行处理。现在,它可以正常工作,并且会像预期的那样无声地失败:
try:
raise SyntaxError
except: pass
但是,我从未见过function
或class
或任何东西引发SyntaxError
。那么,当唯一的用途似乎无意义地提高了它的价值时,为什么它如此易于使用和捕获呢? python是否在某个地方引发了SyntaxError
可以被捕获的情况?还是只是退出内置作用域而已?
答案 0 :(得分:3)
我相信documentation是不言自明的:
在解析器遇到语法错误时引发。这可能发生在导入语句,对内置函数
exec()
或eval()
的调用中,或者在读取初始脚本或标准输入时(也以交互方式)。
答案 1 :(得分:1)
解决此问题的简单方法是搜索在实践中如何引发此异常。我已经下载了CPython源代码,所以我做了
find . -type f -name "*.py" | xargs grep "raise SyntaxError"
我们看到有一个执行文件转换的实用程序脚本,如果在正确的位置看不到魔术字节,则会引发语法错误。另外,xml
库在解析XPath表达式时使用它们。
这表明它也应由处理其他内容的用户代码使用。在Google搜索“ raise SyntaxError”时,显示了以这种方式使用它的许多结果。
我对Python内部并不十分熟悉,但是我认为能够像解析其他错误一样处理源代码解析错误。另外eval
等必须提出一些建议,例如文档和先前的答案状态。
答案 2 :(得分:1)
在程序中很少使用SyntaxError
。通常仅在遇到无效语法时才用于python解释器。
我能想到的唯一情况是,您在未知值上使用SyntaxError
或exec
时会捕获eval
。例如,如果您正在执行用户输入,则输入可能无效,并且您需要捕获SyntaxError
。