«Синтаксическая ошибка» при возврате True на Python 3.2 - PullRequest
3 голосов
/ 19 февраля 2012

В данный момент в моем скрипте есть следующая функция:

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 ]

12 голосов
/ 19 февраля 2012

Вам не хватает скобки.

Вам необходимо изменить эту строку:

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 аргумент в следующей строке?
Или добавить +100 к (p_year * 365)? (как предложил 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 в месте, где его не должно было быть.

1 голос
/ 19 февраля 2012

Ошибка на линии раньше.

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

Отсутствует близкий друг

...