You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 14:45:00