Python中的SyntaxError不一致?
考虑这两个片段:
try: a+a=a except SyntaxError: print "first exception caught" 。
 try: eval("a+a=a") except SyntaxError: print "second exception caught" 
在第二种情况下,“第二个exception”声明被打印(exception捕获),而第一个不是。
是第一个exception(让我们称之为“SyntaxError1”)与第二个exception(“SyntaxError2”)?
 有什么办法可以捕捉SyntaxError1(从而抑制编译时错误)? 在eval包装大块代码是不能令人满意的;) 
 在第一种情况下,编译器引发exception,在try/except结构甚至存在 之前运行(因为编译器本身将在parsing之后立即进行设置)。 在第二种情况下,编译器运行两次 – 编译器作为eval一部分运行时,编译器的第一次运行已经设置try/except 后 ,引发exception。 
 因此,为了拦截语法错误,你必须安排编译器运行两次eval是一种方法,显式compile内置函数调用另一个, import非常方便(在将代码写入另一个文件之后), exec和execfile还有其他的可能性。 但是无论如何,语法错误只有在编译器第一次运行一次才能设置您需要的try/except块后才能被捕获! 
简短的回答:不。
语法错误发生在parsing代码时,对于普通的Python代码来说,在执行代码之前会发生语法错误 – 由于代码没有执行,代码不会在try / except块内部执行。
但是当你评估或者执行一些代码的时候,你在运行时parsing它,这样你就可以捕获到exception。