python'for key in' - 如何修复'SyntaxError:invalid syntax'

时间:2013-02-16 12:01:16

标签: python setuptools

我正在尝试从github(https://github.com/danielfullmer/nzbfs)安装(python setup.py install)一些python包但是得到了

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"))

怎么了?在debian上试过python2.6 + 3.1,但总是卡在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                            

2 个答案:

答案 0 :(得分:3)

为您提供语法错误的行称为dict comprehension;这些被添加到Python 2.7和3中的语言中。

此模块 Python 3就绪;例如,它使用ConfigParser模块,在Python 3中重命名为configparser。您必须坚持使用Python 2.7。

如果这是一个showstopper,你必须raise an issue与开发人员,要求Python 2.6兼容性(不是很难实现)。

答案 1 :(得分: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

中工作