我正在尝试将脚本从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?我还没有找到答案...
答案 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