datetime.timedelta (x, y) возвращает TypeError на CoCalc.com, но работает в другом месте - почему? - PullRequest
0 голосов
/ 07 февраля 2019

Мой код работает на onlinegdb.com, но не на CoCalc.com.

import datetime
slowduration = datetime.timedelta(0,1)
print(slowduration)

Возвращает

TypeError: unsupported type for timedelta seconds component: sage.rings.integer.Integer

Мне не ясно, является ли это функцией илиошибка.

Ответы [ 3 ]

0 голосов
/ 11 февраля 2019

ответ Иакова верен;вот еще несколько деталей.

В SageMath есть нечто, называемое препарсером, который интерпретирует вещи так, что целые числа являются математическими целыми числами, а не числами Python.Так например :

sage: preparse('1+1')
'Integer(1)+Integer(1)'

Есть еще много чего, что нужно - попробуйте preparse('f(x)=x^2') для настоящего удовольствия.Но да, это особенность.

Чтобы исправить проблему в ядре Sage, вы можете просто сделать this :

import datetime
slowduration = datetime.timedelta(int(0),int(1))
print(slowduration)

, чтобы получить 0:00:01как ваш ответ.

0 голосов
/ 01 марта 2019

В дополнение к ответу @ kcrisman и трюку "int(0), int(1)" ...

Два других варианта, если кто-то хочет придерживаться ядра Sage, это

  • (1)отключите препарсер с помощью preparser(False),
  • (2) и добавьте r (для «raw») к целым числам, например, datetime.timedelta(0r, 1r).

См. также похожие вопросы иответы на вопросы о подготовке Sage чисел и чисел:

Наконец, обратите внимание, что код можно загрузить в Sage из внешних файлов, используя:

  • load('/path/to/filename.py')
  • load('/path/to/filename.sage')

, где .sage файлы получат "Sage-preparsed", а файлы .py - нет.

Это дает третий вариант обхода препарсера: загрузка кода из файла .py.

0 голосов
/ 07 февраля 2019

Если у кого-то еще есть такая проблема - оказывается, я использовал математическое ядро ​​Sage, а не математическое ядро ​​Python.Этот сайт предлагает что-то вроде 15 разных ядер.

...