hum*_*ing 22 python error-handling
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)]
zwo*_*wol 36
你也只能望尘莫及SyntaxError,如果它抛出一个中eval,exec或import运行.
>>> try:
... eval('x === x')
... except SyntaxError:
... print "You cannot do that"
...
You cannot do that
Run Code Online (Sandbox Code Playgroud)
这是因为通常,解释器在执行任何文件之前会解析整个文件,因此它会在try执行语句之前检测语法错误.但是,如果您使用eval或其朋友在程序执行期间导致更多代码被解析,那么您可以捕获它.
我很确定这是在某个官方手册中,但我现在找不到它.
mgi*_*son 20
SyntaxError在解析文件/代码时引发,而不是在执行该行代码时引发.原因很简单 - 如果代码中的单个点的语法错误,则解析器无法继续,因此该行之后的所有代码都是不可解析的.
换句话说,当python尝试解析某些内容时,您只能捕获语法错误.这包括exec,eval,import:
>>> try:
... import junk
... except SyntaxError:
... print "Woo"
...
Woo
Run Code Online (Sandbox Code Playgroud)
以及关于ast诸如此类的各种事物.
请注意,python教程甚至可以区分SyntaxError和其他异常,尽管区别并不像教程所显示的那样明显(因为SyntaxError如果你知道它们何时被提升,你实际上可以捕获).
| 归档时间: |
|
| 查看次数: |
8476 次 |
| 最近记录: |