try:
x===x
except SyntaxError:
print "You cannot do that"
Run Code Online (Sandbox Code Playgroud)
输出
x===x
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
这也没有抓住它
try:
x===x
except:
print "You cannot do that"
Run Code Online (Sandbox Code Playgroud)
其他错误,如NameError,ValueError,都是可捕获的.
思考?
系统规格:
import sys
print(sys.version)
Run Code Online (Sandbox Code Playgroud)
- > 2.7.5(默认,2014年3月9日,22:15:05)[GCC 4.2.1兼容的Apple LLVM 5.0(clang-500.0.68)]
考虑这两个片段:
try:
a+a=a
except SyntaxError:
print "first exception caught"
Run Code Online (Sandbox Code Playgroud)
.
try:
eval("a+a=a")
except SyntaxError:
print "second exception caught"
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,打印"第二个异常.."语句(异常捕获),而在第一个异常捕获时则不是.
第一个异常(让我们称之为"SyntaxError1")与第二个异常("SyntaxError2")?
有没有办法捕获SyntaxError1(从而抑制编译时错误)?包装大块代码eval是不能令人满意的;)