Python列表推导式中三元运算符运行结果不符合预期排查
列表推导式条件分支全命中else问题排查
问题表现
有如下列表推导式,预期遍历指定路径下的条目,普通文件对应值为1,目录对应值为0:
[1 if os.path.isfile(file) else 0 for file in os.listdir(path)]
实际运行后生成的列表所有元素均为0,全部命中else分支。
已做验证如下:
- 单独执行
1 if os.path.isfile(file) else 0,结果正常,同时包含1和0 - 列表推导式不存在语法错误
- 将判断条件替换为
1 if file else 0后,运行结果全部为1,和预期不符,单独验证该条件表达式结果正常 - 尝试为判断条件添加
bool()转换、将参数转换为str(file),均无改善
根因定位
该问题与列表推导式完全无关,故障原因是向os.path.isfile()传参时仅传入了文件名,没有传入完整路径,导致函数返回值恒为False。os.listdir(path)仅返回目标路径下的文件/目录名,不携带父路径前缀。os.path.isfile()仅接收文件名时,会默认在当前工作目录下查找对应文件,只要你遍历的路径不是当前工作目录,所有判断都会返回False,自然会全部命中else分支返回0。
修复代码
将文件名与父路径拼接为完整路径后再传入判断即可:
[1 if os.path.isfile(os.path.join(path, file)) else 0 for file in os.listdir(path)]
内容的提问来源于stack exchange,提问作者Billy Cao
相关产品推荐
相关产品推荐

