如何除SyntaxError外?

时间:2009-09-27 11:04:20

标签: python exception-handling

我想除了以下代码产生的错误,但我不知道如何。

from datetime import datetime

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

上面的代码不是打印"error"。这就是我希望能够做到的。

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

感谢。

3 个答案:

答案 0 :(得分:9)

命令行“参数”是字符串。如果你的代码是:

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

答案 1 :(得分:3)

如果您想检查命令行参数,还可以使用argparseoptparse,他们会为您处理语法检查。

答案 2 :(得分:3)

您无法捕获语法错误,因为源必须在执行之前有效。我不太确定,为什么你不能简单地修复语法错误,但如果具有datetime的行是从用户输入(?)自动生成的,你必须能够捕获这些错误,你可能会尝试:

try:
    date = eval('datetime(2009, 12a, 31)')
except SyntaxError:
    print 'error'

但这仍然是一个可怕的解决方案。也许你可以告诉我们为什么你必须捕获这样的语法错误。