鱼C论坛

 找回密码
 立即注册
查看: 2088|回复: 8

请问我的代码这里为什么会报错啊

[复制链接]
发表于 2020-3-17 14:37:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. import os
  2. import os.path

  3. def f_search(index, f_name):
  4.     os.chdir(index)
  5.     list1 = os.walk(index)
  6.     for each in list1 :
  7.         (a,b,c) = each
  8.         while b != '':
  9.             return f_search(b,f_name)
  10.         if c == f_name:
  11.             print (a)

  12. index = input('请输入待查找的初始目录:')
  13. f_name = input ('请输入需要查找的目标文件:')

  14. f_search(index, f_name)
  15.             
复制代码


每次运行都会提示
TypeError: chdir: path should be string, bytes or os.PathLike, not list

但是问题是我之前定义的函数用的同样的index进去输入也没有问题,这次唯一的变化就是函数的参数增加了一个
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-17 14:46:29 | 显示全部楼层
本帖最后由 qiuyouzhi 于 2020-3-17 14:52 编辑

os.chdir的path参数要的是字符串,你传个列表
  1. import os
  2. import os.path

  3. def f_search(index, f_name):
  4.     os.chdir(index)
  5.     list1 = os.walk(index)
  6.     for each in list1:
  7.         (a,b,c) = each
  8.         print(b)
  9.         while b != '':
  10.             return f_search(b,f_name)
  11.         if c == f_name:
  12.             print(a)

  13. index = input('请输入待查找的初始目录:')
  14. f_name = input ('请输入需要查找的目标文件:')

  15. f_search(index, f_name)
复制代码

运行一下试试,看打印出来啥
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-17 14:52:43 | 显示全部楼层
qiuyouzhi 发表于 2020-3-17 14:46
os.chdir的path参数要的是字符串,你传个列表

不是不是,我最底下用的input命令,输入的应该就是字符串的形式啊。为什么目录就自动变成列表的形式了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-17 14:54:17 | 显示全部楼层
huzeyu 发表于 2020-3-17 14:52
不是不是,我最底下用的input命令,输入的应该就是字符串的形式啊。为什么目录就自动变成列表的形式了

看我发的代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-17 14:59:33 | 显示全部楼层

TypeError: chdir: path should be string, bytes or os.PathLike, not list


还是这个报错。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-17 15:07:33 | 显示全部楼层
huzeyu 发表于 2020-3-17 14:59
TypeError: chdir: path should be string, bytes or os.PathLike, not list

。。。
我让你看b的值,是不是一个列表?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-17 15:11:56 | 显示全部楼层
  1. Traceback (most recent call last):
  2.   File "C:\Users\all\Documents\CS\test.py", line 18, in <module>
  3.     f_search(index, f_name)
  4.   File "C:\Users\all\Documents\CS\test.py", line 11, in f_search
  5.     return f_search(b,f_name)
  6.   File "C:\Users\all\Documents\CS\test.py", line 5, in f_search
  7.     os.chdir(index)
  8. TypeError: chdir: path should be string, bytes or os.PathLike, not list
复制代码



这是报错的部分,中间的b我是尝试把列表中的元组的其中一个值赋值给b。不知道是不是因为这一步出现的报错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-17 15:16:40 | 显示全部楼层
huzeyu 发表于 2020-3-17 14:52
不是不是,我最底下用的input命令,输入的应该就是字符串的形式啊。为什么目录就自动变成列表的形式了

你的程序看似出错在第5行,实际上出错在递归调用的第10行。
os.walk的返回值list1分为三部分:路径, [包含目录], [包含文件]
第7行不应该对list1进行遍历,而是应该对[包含目录]进行遍历
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-17 15:31:01 | 显示全部楼层
sunrise085 发表于 2020-3-17 15:16
你的程序看似出错在第5行,实际上出错在递归调用的第10行。
os.walk的返回值list1分为三部分:路径, [包 ...

但是这个包含目录是存在列表的元组之中的,如果不对列表进行遍历的话,还有什么办法能获得到包含目录的值呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-14 10:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表