鱼C论坛

 找回密码
 立即注册
查看: 2258|回复: 7

[已解决]完全找不到bug到底在哪

[复制链接]
发表于 2023-4-29 10:28:14 | 显示全部楼层 |阅读模式

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

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

x

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.stat().st_mtime] = dic[each.name]
        time_.append(each.stat().st_mtime)
time_ = sorted(time_)
name = dic[time_[-1]]
print("修改时间->",time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time_[-1])),"文件名->",name)

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

但是循环中的第一句(dic[each.stat().st_mtime] = dic[each.name])就报错,下面帖一下报错代码:

Traceback (most recent call last):
  File "C:\Users\75574\Desktop\isPalindrome.py", line 10, in <module>
    dic[each.stat().st_mtime] = dic[each.name]
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,有点头疼
最佳答案
2023-4-29 10:31:56
问题出在这一句代码:

dic[each.stat().st_mtime] = dic[each.name]

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

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

dic[each.stat().st_mtime] = 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.stat().st_mtime] = each.name
time_.append(each.stat().st_mtime)

time_ = sorted(time_)
name = dic[time_[-1]]
print("修改时间->", time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time_[-1])), "文件名->", name)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-29 10:29:38 | 显示全部楼层
首先,感谢您提供了详细的代码和错误信息。让我们一起来解决这个问题。

问题出在这一行代码:
dic[each.stat().st_mtime] = dic[each.name]

这里的 dic[each.name] 应该是 each.name 。因为您要将文件的修改时间作为键,文件名作为值。所以,您需要将这一行代码更改为:
dic[each.stat().st_mtime] = 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.stat().st_mtime] = each.name
        time_.append(each.stat().st_mtime)

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

这样,代码就应该可以正常运行了。希望这对您有所帮助!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-4-29 10:31:56 | 显示全部楼层    本楼为最佳答案   
问题出在这一句代码:

dic[each.stat().st_mtime] = dic[each.name]

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

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

dic[each.stat().st_mtime] = 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.stat().st_mtime] = each.name
time_.append(each.stat().st_mtime)

time_ = sorted(time_)
name = dic[time_[-1]]
print("修改时间->", time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time_[-1])), "文件名->", name)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-29 10:44:27 | 显示全部楼层
为什么不给我最佳?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-29 10:47:49 | 显示全部楼层
isdkz 发表于 2023-4-29 10:44
为什么不给我最佳?

之前没看到你的帖子,等看到的时候想给已经晚了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-29 10:49:40 | 显示全部楼层
爱睡懒觉 发表于 2023-4-29 10:47
之前没看到你的帖子,等看到的时候想给已经晚了

好吧,问题不大

点评

我很赞同!: 5.0
再看看  发表于 2023-4-29 13:52
我很赞同!: 5
大佬看看私信  发表于 2023-4-29 13:34
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 13:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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