如何捕获SyntaxError?

3 投票
3 回答
6598 浏览
提问于 2025-04-15 14:38

我想要处理一下下面这段代码产生的错误,但我不知道该怎么做。

from datetime import datetime

try:
    date = datetime(2009, 12a, 31)
except:
    print "error"

上面的代码没有打印出 "error"。我希望能够做到这一点。

补充一下:我想检查语法错误的原因是因为 12a 是一个命令行参数。

谢谢。

3 个回答

3

如果你想检查命令行参数,可以使用argparse或者optparse这两个工具,它们会帮你检查语法是否正确。

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')

撰写回答