gpt4 book ai didi

Python 'continue' 干扰 'try/except' 或 'with'?

转载 作者:行者123 更新时间:2023-11-28 19:02:26 29 4
gpt4 key购买 nike

我有一个老脚本多年来一直在履行职责,但突然失败了,而且我不明白它怎么会走到失败的地步,因为我想消除这种情况:

它应该遍历文件列表(目录的内容),如果当前文件以 .sum 结尾,它应该检查是否有同名文件减去 .sum 结尾(如 file1.txt.sumfile1.txt)。如果两个文件都存在,它应该对 file.txt 进行校验和并将其与校验和文件的内容进行比较。

仅当此检查成功时,才会有进一步的操作以从目录中删除两个文件结束。

for file in filelist:
checksum_downloaded_file, checksum_from_checksumfile = '0', '1'
if file.endswith('.sum'):
# read checksum from checksum file
f_sum = open(SAVETO + file, 'rb')
with f_sum:
checksum_from_checksumfile = f_sum.readline().split(' ')[0].rstrip().lower()
# checksum() the file
try:
f = open(SAVETO + file[:-4], 'rb')
except:
continue
with f:
checksum_downloaded_file = hashlib.sha256(f.read()).hexdigest()

# compare delivered checksum with selfmade
if checksum_downloaded_file == checksum_from_checksumfile:
[...]
sftp.remove(file)
sftp.remove(file[:-4])

我认为检查是否存在与校验和文件同名的文件,除了 .sum 结尾将由

以可靠的方式完成
    try:
f = open(SAVETO + file[:-4], 'rb')
except:
continue

阻止。但是今天脚本在尝试删除脚本末尾的两个文件时失败了,因为没有 .sum 结尾的文件不存在。这怎么会发生? continue 不会在那个上下文中完成它的工作吗?

编辑:由于代码在逻辑上似乎没有任何错误,因此错误可能在外部(尽管我不知道它是如何发生的)。因此,更多信息:文件的实际来源是通过 SFTP(使用 pysftp)到达的目录。 filelistfilelist = sftp.listdir() 填充,并且在有问题的 block 开始之前下载所有文件(到 SAVETO)。之后应该使用 sftp.remove(file[:-4]) 在 SFTP 服务器上删除它们,这是脚本失败的地方

Traceback (most recent call last):
File "script.py", line 71, in <module>
sftp.remove(file[:-4])
File "/home/alba/.local/lib/python2.7/site-packages/pysftp/__init__.py", line 728, in remove
self._sftp.remove(remotefile)
File "/home/alba/.local/lib/python2.7/site-packages/paramiko/sftp_client.py", line 365, in remove
self._request(CMD_REMOVE, path)
File "/home/alba/.local/lib/python2.7/site-packages/paramiko/sftp_client.py", line 780, in _request
return self._read_response(num)
File "/home/alba/.local/lib/python2.7/site-packages/paramiko/sftp_client.py", line 832, in _read_response
self._convert_status(msg)
File "/home/alba/.local/lib/python2.7/site-packages/paramiko/sftp_client.py", line 861, in _convert_status
raise IOError(errno.ENOENT, text)
IOError: [Errno 2] No such file or directory

EDIT2:仍然不能放手。我想如果文件在脚本下载后在服务器上被删除,脚本就会像这样失败,因为文件当然不会再存在了。但是从那以后,脚本每次都失败了。没有意义..

EDIT3:在答案中解决。感谢您的时间和耐心等待。

最佳答案

我在代码中搜索错误的第一个方法是给这个线程标题,结果是错误的。

当输入目录被输入一个校验和文件时,这个错误就会发生,这个文件在过去已经被输入,然后正确地返回,因此有一个相应的数据文件,但现在没有那个相应的数据文件:(再次)下载的校验和文件得到评估,脚本查找对应的数据文件,该文件仍然存在于过去的工作目录中。它运行其操作并最终尝试从输入目录中删除校验和和数据文件,但数据文件失败了。

不可预见的、未处理的案件;超出了最初的规范,但仍然令人尴尬。我从中学到了如何更真实地对调试方法列表进行排序。

关于Python 'continue' 干扰 'try/except' 或 'with'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51211409/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com