如何捕获SyntaxError?
我想要处理一下下面这段代码产生的错误,但我不知道该怎么做。
from datetime import datetime
try:
date = datetime(2009, 12a, 31)
except:
print "error"
上面的代码没有打印出 "error"
。我希望能够做到这一点。
补充一下:我想检查语法错误的原因是因为 12a 是一个命令行参数。
谢谢。
3 个回答
4
你无法捕捉到语法错误,因为在代码执行之前,源代码必须是有效的。我不太明白为什么你不能简单地修复语法错误,但如果包含日期时间的那一行是根据用户输入自动生成的(?),而你又必须能够捕捉到这些错误,你可以试试:
try:
date = eval('datetime(2009, 12a, 31)')
except SyntaxError:
print 'error'
不过这仍然是个糟糕的解决方案。也许你可以告诉我们,为什么你必须捕捉这些语法错误。
10
命令行的“参数”其实都是字符串。如果你的代码是:
datetime(2009, '12a', 31)
它不会产生 SyntaxError
(语法错误)。而是会引发 TypeError
(类型错误)。
在你的代码中使用命令行参数之前,必须先对它们进行清理。比如可以这样做:
month = '12'
try:
month = int(month)
except ValueError:
print('bad argument for month')
raise
else:
if not 1<= month <= 12:
raise ValueError('month should be between 1 to 12')