datetime.timedelta(x,y)在CoCalc.com上返回TypeError但在其他地方工作 - 为什么?

问题描述 投票:1回答:3

我的代码适用于onlinegdb.com,但不适用于CoCalc.com。

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

返回

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

我不清楚这是一个功能还是一个bug。

python jupyter-notebook sage
3个回答
2
投票

补充@ 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文件则不会。

这提供了绕过预分析器的第三个选项:从.pyfile加载代码。


2
投票

如果其他人有这样的问题 - 事实证明我使用的是Sage数学内核而不是Python数学内核。这个网站提供了15种不同的内核。


2
投票

雅各布的自我回答是正确的;这里有一些细节。

在SageMath中有一种称为预分析器的东西可以解释事物,因此整数是数学整数,而不是Python整数。所以for example

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作为你的答案。

© www.soinside.com 2019 - 2024. All rights reserved.