2013-02-16 67 views
1

我试图安装(蟒蛇的setup.py安装)从GitHub一些Python包(https://github.com/danielfullmer/nzbfs),但得到蟒蛇“在关键” - 如何解决“语法错误:无效的语法”

SyntaxError: ('invalid syntax', ('build/bdist.linux-x86_64/egg/nzbfs/fs.py', 135, 15, "   for key in ('st_atime', 'st_ctime', 'st_gid', 'st_mode', 'st_mtime', 'st_nlink', 'st_size', 'st_uid'):\n")) 

什么错?试图python2.6的+ 3.1 Debian的,但总是陷入对for key ..线

def getattr(self, path, fh=None): 
    st = os.lstat(self.db_root + path) 

    d = { 
     key: getattr(st, key) 
     for key in ('st_atime', 'st_ctime', 'st_gid', 'st_mode', 
        'st_mtime', 'st_nlink', 'st_size', 'st_uid') 
    } 

    if stat.S_ISREG(st.st_mode): 
     nzf_size = get_nzf_attr(self.db_root + path, 'size') 
     if nzf_size is not None: 
      d['st_size'] = nzf_size 
     nzf_mtime = get_nzf_attr(self.db_root + path, 'mtime') 
     if nzf_mtime is not None: 
      d['st_mtime'] = nzf_mtime 
    d['st_blocks'] = d['st_size']/512 

    return d        
+3

这是一本字典的理解这是只有在Python 2.7和有效期,工作,所以使用2.6韩元”工作。 – l4mpi 2013-02-16 12:03:52

回答

3

,让你一个语法错误的线被称为dict comprehension;这些被添加到Python 2.7和3的语言中。

该模块是而不是 Python 3已准备好;它使用ConfigParser模块,例如在Python 3中已将其重命名为configparser。您必须坚持使用Python 2.7。

如果这对你来说是一个炫耀者,那么你必须和开发者一起raise an issue,要求Python 2.6的兼容性(不难实现)。

1

您可以在字典的理解改变这种

d = dict(
     (key, getattr(st, key)) 
     for key in ('st_atime', 'st_ctime', 'st_gid', 'st_mode', 
        'st_mtime', 'st_nlink', 'st_size', 'st_uid') 
    ) 

,如果你需要它在2.6

+0

我回避告诉OP如何修复*这个特定的实例*;代码库足够大,它可以轻松地隐藏更多需要修复的Python 2.7语法。 – 2013-02-16 13:06:34