爱睡懒觉 发表于 2023-4-29 10:28:14

完全找不到bug到底在哪


from pathlib import Path
import time
f = Path.cwd()
q = f.iterdir()
dic = {}
time_ = []
print("当前路径:",f)
for each in q:
    if each.is_file():
      dic = dic
      time_.append(each.stat().st_mtime)
time_ = sorted(time_)
name = dic]
print("修改时间->",time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time_[-1])),"文件名->",name)

这是我的代码,首先将当前目录下的所有文件的修改时间和文件名存储至dic字典中,键为修改时间,文件名为值,并且将修改时间存储至列表time中,排序列表后time[-1]即为修改时间最大的值,通过这个值找到字典中的文件名

但是循环中的第一句(dic = dic)就报错,下面帖一下报错代码:

Traceback (most recent call last):
File "C:\Users\75574\Desktop\isPalindrome.py", line 10, in <module>
    dic = dic
KeyError: 'Adobe After Effects 2021.lnk'

这个keyerror百思不得其解啊,因为each.stat().st_mtime和each.name都是可以打印出来的,如下:
1675001335.939798
Adobe After Effects 2021.lnk
1674998012.653168
Adobe Illustrator 2021.lnk
1643424093.966148
Adobe Premiere Pro 2022.lnk
1679650589.6543558
CCtalk.lnk
1656213865.1332428
DeepL.lnk
1643335006.9238348
desktop.ini
1667559304.8656418
EV录屏.lnk

所以相当于键和值都是真,却返回key不存在的bug,有点头疼

isdkz 发表于 2023-4-29 10:29:38

首先,感谢您提供了详细的代码和错误信息。让我们一起来解决这个问题。

问题出在这一行代码:

dic = dic


这里的 dic 应该是 each.name 。因为您要将文件的修改时间作为键,文件名作为值。所以,您需要将这一行代码更改为:

dic = each.name


更正后的代码如下:

from pathlib import Path
import time

f = Path.cwd()
q = f.iterdir()
dic = {}
time_ = []
print("当前路径:", f)

for each in q:
    if each.is_file():
      dic = each.name
      time_.append(each.stat().st_mtime)

time_ = sorted(time_)
name = dic]
print("修改时间->", time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time_[-1])), "文件名->", name)


这样,代码就应该可以正常运行了。希望这对您有所帮助!

陶远航 发表于 2023-4-29 10:31:56

问题出在这一句代码:

dic = dic

在第一次循环中,字典 dic 中是没有任何元素的。因此,你尝试使用 dic 作为 value 来赋值给 dic 的时候,因为 each.name 不存在于字典 dic 中而抛出 KeyError 异常。

此外,即使 dic 已经被初始化了,这一行代码仍然是错误的。你应该把 each.name 作为值,而不是作为键,因为你想要根据每个文件的修改时间来查找其名称。因此,你需要使用以下代码:

dic = each.name

这将把文件名作为值存储在字典 dic 中,使得每个 key(即修改时间)都对应着正确的文件名。

以下是更正后的代码:

from pathlib import Path
import time

f = Path.cwd()
q = f.iterdir()
dic = {}
time_ = []
print("当前路径:",f)
for each in q:
if each.is_file():
dic = each.name
time_.append(each.stat().st_mtime)

time_ = sorted(time_)
name = dic]
print("修改时间->", time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time_[-1])), "文件名->", name)

isdkz 发表于 2023-4-29 10:44:27

为什么不给我最佳?{:5_100:}

爱睡懒觉 发表于 2023-4-29 10:47:49

isdkz 发表于 2023-4-29 10:44
为什么不给我最佳?

之前没看到你的帖子,等看到的时候想给已经晚了{:5_104:}

isdkz 发表于 2023-4-29 10:49:40

爱睡懒觉 发表于 2023-4-29 10:47
之前没看到你的帖子,等看到的时候想给已经晚了

好吧,问题不大{:5_97:}
页: [1]
查看完整版本: 完全找不到bug到底在哪