将Python 2x移植到3x

时间:2019-07-16 09:26:49

标签: python-3.7

我正在尝试将脚本从python 2版本移植到3版本。

我是python的新手,所以我不知道如何翻译它:

cmd = filter(None, [
    '/usr/bin/cmake',
    lists_directory,
    '-DCMAKE_INSTALL_PREFIX=' + args.prefix,
    '-DCMAKE_BUILD_TYPE=' + ('Debug' if args.debug else 'Release'),
    '-DCMAKE_TOOLCHAIN_FILE=' + args.toolchain,
    '-DBUILD_SHARED_LIBS=' + ('1' if args.shared else '0'),
    '-DCMAKE_MAKE_PROGRAM=' + '/usr/ninja/ninja-1.7.2/bin/ninja' if args.generator == 'Ninja' else None,
    '-DAPP_MAX_LINKER_JOBS=' + str(args.linker_jobs) if args.linker_jobs else None,
    '-G', args.generator,
])

cmd += args.other

这会出现以下错误:

TypeError: unsupported operand type(s) for +=: 'filter' and 'list

如何将其移植到Python 3?我还没有找到答案...

1 个答案:

答案 0 :(得分:1)

在python3 filter中返回一个生成器对象。使用list()将其转换为列表对象。

例如:

cmd = list(filter(None, [
    '/usr/bin/cmake',
    lists_directory,
    '-DCMAKE_INSTALL_PREFIX=' + args.prefix,
    '-DCMAKE_BUILD_TYPE=' + ('Debug' if args.debug else 'Release'),
    '-DCMAKE_TOOLCHAIN_FILE=' + args.toolchain,
    '-DBUILD_SHARED_LIBS=' + ('1' if args.shared else '0'),
    '-DCMAKE_MAKE_PROGRAM=' + '/usr/ninja/ninja-1.7.2/bin/ninja' if args.generator == 'Ninja' else None,
    '-DAPP_MAX_LINKER_JOBS=' + str(args.linker_jobs) if args.linker_jobs else None,
    '-G', args.generator,
]))

cmd += args.other