1

我正在尝试从 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                            
4

2 回答 2

3

给你一个语法错误的那行叫做dict comprehension;这些被添加到 Python 2.7 和 3 中的语言中。

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

如果这对您来说是一个阻碍,您将不得不向开发人员提出一个问题,要求与 Python 2.6 兼容(实现起来并不难)。

于 2013-02-16T12:06:49.123 回答
1

您可以将 dict 理解更改为此

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 中工作

于 2013-02-16T13:00:31.910 回答