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

Python实现指定目录文件列表功能遇TypeError问题求助

问题解决思路与修正代码

核心错误原因

你碰到的TypeError: listdir() takes at most 1 argument (3 given),是因为os.listdir()仅接受一个参数——目标目录的完整路径,但你最后一行代码给它传了3个参数,完全违背了函数的调用规则。

代码里的其他隐藏问题

  • 类型判断逻辑矛盾:把输入转成int后,又和字符串'360'/'720'比较,类型不匹配导致这两个if分支永远不会执行;而且os.system("cd ...")完全没用,子进程的目录切换不会影响主程序的工作目录。
  • 无效调用:构造folder_path后调用os.listdir(folder_path)却没保存结果,等于白执行。
  • 缺少需求中的目录存在性检查逻辑。

修正后的完整代码

import os

# 获取并验证设备类型
while True:
    response = input('SCA Type (360/720): ')
    try:
        sca_type = str(int(response))
        if sca_type not in ['360', '720']:
            print('无效的SCA类型,请输入360或720')
            continue
        break
    except ValueError:
        print('无效的SCA类型,请输入数字')
        continue

# 构造基础目录并检查存在性
base_folder = f'/var/SCAConfigs/SCA{sca_type}/sites/'
if not os.path.isdir(base_folder):
    print(f"错误:目录 {base_folder} 不存在")
    exit(1)

# 获取并验证MAC对应的目录
while True:
    mac_address = input('MAC: ')
    target_folder = os.path.join(base_folder, mac_address, 'archive')
    if os.path.isdir(target_folder):
        break
    print(f"错误:目录 {target_folder} 不存在,请检查MAC输入")

# 列出目标目录下的文件
file_list = os.listdir(target_folder)
print(f"\n{target_folder} 下的文件:")
for file in file_list:
    print(f"- {file}")

关键修正说明

  • 修复类型判断:转成字符串后再验证合法类型,避免int与str不匹配的问题。
  • 移除无效的os.system("cd"),直接通过路径拼接定位目标目录。
  • 用os.path.join()拼接路径,避免手动拼接字符串导致的路径格式错误。
  • 增加了完整的目录存在性检查,符合你需求中的验证逻辑。
  • 正确调用os.listdir(),仅传入一个合法的目录路径参数。

内容的提问来源于stack exchange,提问作者eatmydictionary3

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 23:11:03