在Python 3.2中返回True时出现'语法错误
我现在在我的脚本里有一个这样的函数:
def _convert_time(p):
"""Converts a percentage into a date,
based on current date."""
# This is the number of years that we subtract from
# the current date.
p_year = pow(math.e, (20.344 * pow(p, 3) + 3)) - pow(math.e, 3)
# Returns in YYYY-MM-DD format
date_in_history = date.today() - timedelta(days=(p_year * 365)
# Return to the control loop
return True
我所有的函数都采用这种方式,在最后返回一个True。这是因为有一个中心函数会依次运行每个函数,并检查它们是否正确执行,然后再执行下一个函数。
但是,当我运行这个脚本时,在我甚至还没输入任何值来启动脚本之前,就出现了以下错误:
File "C:\Users\Callum\Desktop\Tempus\TempusTest.py", line 59
return True
^
如果我在IDLE里写一个返回True的函数并检查它,那是没问题的,但不知道为什么在我的脚本里就不行。
你们有没有想过这可能是什么原因呢?
谢谢!:)
2 个回答
1
错误出现在前一行。
date_in_history = date.today() - timedelta(days=(p_year * 365)
10 1 2 1
date_in_history = date.today() - timedelta(days=(p_year * 365))
10 1 2 10
缺少一个右括号。
12
你缺少一个括号。
你需要把这一行改成:
date_in_history = date.today() - timedelta(days=(p_year * 365)
改为:
date_in_history = date.today() - timedelta(days=(p_year * 365))
^
|
it was this one :)
问:为什么错误出现在返回那一行,而不是其他地方?
因为错误其实就在那儿。
Python怎么知道你在下一行不会再给一个合法的 timedelta
参数呢?
或者在 (p_year * 365)
后面加个 +100
呢?(就像DSM建议的那样)
我们来看一下这个IDE的会话:
>>> t = ('one', 'two',
... 'three'
... def f(): pass
File "<stdin>", line 3
def f(): pass
^
SyntaxError: invalid syntax
IDE无法知道我的元组已经结束,我不会再添加一个 'fourth'
元素。
你可能会想反驳说,我没有输入逗号,所以Python应该猜到我打算在那儿结束元组。
但是看看这个例子:
>>> t = ('one', 'two',
... 'three'
... 'fourth')
>>>
>>> t
('one', 'two', 'threefourth')
所以你看到错误正好发生在Python遇到一个不该出现的 return True
的地方。