在Python 3.2中返回True时出现'语法错误

4 投票
2 回答
5411 浏览
提问于 2025-04-17 13:13

我现在在我的脚本里有一个这样的函数:

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 的地方。

撰写回答