Python sage 5.0 execfile()的语法错误

Python sage 5.0 execfile()的语法错误,python,sage,Python,Sage,以下是我希望能够在会话中调用的.sage文件的一部分: def projective_grid(m,n): r""" The mxn grid in projective space """ g = graphs.Grid2dGraph(m,n) g = Graph(g) for i in range(m): g.add_edge(((i,0),(m-i-1,n-1),1)) for j in [1..(n-2)]:

以下是我希望能够在会话中调用的.sage文件的一部分:

def projective_grid(m,n):  
    r"""
    The  mxn grid in projective space
    """
    g = graphs.Grid2dGraph(m,n)
    g = Graph(g)
    for i in range(m):
        g.add_edge(((i,0),(m-i-1,n-1),1))
    for j in [1..(n-2)]:
        g.add_edge(((0,j),(m-1,n-j-1),1))
    g.delete_edge(((0,0),(m-1,n-1)))
    g.add_edge(((0,0),(m-1,n-1),2))
    g.delete_edge(((m-1,0),(0,n-1)))
    g.add_edge(((m-1,0),(0,n-1),2))
    if n%2==1 and m == 2:
        g.delete_edge((0, (n-1)/2), (1, (n-1)/2))
        g.delete_edge((0, (n-1)/2), (1, (n-1)/2))
        g.add_edge((0, (n-1)/2),(1,(n-1)/2),2)
    if n == 2 and m%2==1:
        g.delete_edge(((m-1)/2, 0), ((m-1)/2, 1)) 
        g.delete_edge(((m-1)/2, 0), ((m-1)/2, 1)) 
        g.add_edge(((m-1)/2, 0), ((m-1)/2, 1),2)    
    pos = {}
    k = -1
    for i in [1..m]:
      for j in [1..n]:
        k+=1
        pos[k] = (j,i)
    g.set_pos(pos)
    return g
我可以将此代码复制粘贴到sage会话中,而不会引发错误,但当我尝试使用execfile()调用该文件时,我会得到以下结果:

sage: execfile('/Users/WyattAlt/Desktop/thesis/stack_test.sage')
------------------------------------------------------------
   File "/Users/WyattAlt/Desktop/thesis/stack_test.sage", line 9
     for j in [1..(n-2)]:
                  ^
SyntaxError: invalid syntax
如果我用范围(1,n-1)和类似的方法替换有问题的部件,问题就会消失,但我想了解为什么这不起作用。有什么想法吗?提前谢谢


编辑:我使用的是OS X 10.5.8

Sage语法和Python语法在一些地方有所不同,包括在该范围内的语法

在幕后,Sage控制台准备您输入到标准Python中的内容:

sage: [1..10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sage: preparse('[1..10]')
'(ellipsis_range(Integer(1),Ellipsis,Integer(10)))'
事实上,即使是整数文字也会被包装:

sage: 10
10
sage: preparse('10')
'Integer(10)'
当您使用纯Python函数
execfile
时,您绕过了Sage preparser。如果需要等效的,可以使用
load

sage: !echo "print [1..10]" >> test.sage
sage: !cat test.sage
print [1..10]
sage: execfile("test.sage")
------------------------------------------------------------
   File "test.sage", line 1
     print [1..10]
                ^
SyntaxError: invalid syntax

sage: load("test.sage")
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

完美的谢谢你的帮助,不用担心。两点:(1)别忘了回答你的问题,(2)还有一个类似StackOverflow的问题,但只针对Sage,很多开发人员都在那里闲逛。+1在ask.sagemath.org上作为第一个去的地方-但幸运的是@DSM和其他一些人偶尔会在这里:)作为这个答案的补充,我强烈建议使用
attach
而不是
load
,因为这样会重新加载文件中的任何更改;因为Python是这样动态的,如果你在某个会话中改变了<代码> PojistFieldGET(添加功能,比如说),你就不必重新启动或者什么了。我过去经常使用这个方法。@kcrisman:我总是发现一个
attach
有点黑魔法,根据我的编码方式,它会导致奇怪的半工作状态。。不过,我知道这对其他人有多大用处。