Python 在except之后继续函数
我有一个函数,它只加密特定目录中的文件,我使用Python 在except之后继续函数,python,Python,我有一个函数,它只加密特定目录中的文件,我使用try和except来避免错误,如果有错误,我只希望我的函数继续,而不是退出程序 我的函数是通过文件连接循环,读取文件,然后加密数据并将密码文本写入文件,但我的问题是,如果出现错误,出于某种原因(无法写入文件等),我的程序就会停止 如果出现错误,如何防止程序中断并继续执行该功能 加密功能: 您可以看到,我试图从files函数中获取列表的长度,但它只是继续循环而不是停止 def encrypt(self): for i in range
try
和except
来避免错误,如果有错误,我只希望我的函数继续,而不是退出程序
我的函数是通过文件连接循环,读取文件,然后加密数据并将密码文本写入文件,但我的问题是,如果出现错误,出于某种原因(无法写入文件等),我的程序就会停止
如果出现错误,如何防止程序中断并继续执行该功能
加密功能:
您可以看到,我试图从files
函数中获取列表的长度,但它只是继续循环而不是停止
def encrypt(self):
for i in range(0, len(files())):
try:
for file in files():
print(file)
with open(file, 'rb+') as f:
plain_text = f.read()
cipher_text = self.token.encrypt(plain_text)
f.seek(0); f.truncate()
f.write(cipher_text)
except Exception as e:
print(f'{e}')
文件功能:
这个函数只是获取我的文件并返回一个列表
def files(pattern='*'):
matches = []
for root, dirnames, filenames in chain(os.walk(desktop_path), os.walk(downloads_path), os.walk(documents_path), os.walk(pictures_path)):
for filename in filenames:
full_path = os.path.join(root, filename)
if filter([full_path], pattern):
matches.append(os.path.join(root, filename))
return matches
在开始循环文件之前,请使用
尝试。这意味着它尝试循环您的文件一次,然后捕获一个异常,打印它,然后转到异常处理程序,在那里打印,但此时它已超出for循环
试试看:
对于文件中的文件():
#你的循环
例外情况除外,如e:
#处理一个异常,但从不循环,因为try包含循环
您应该将您的try
放入for循环中,但
除外:
用于文件中的文件():
尝试:
#你的循环
例外情况除外,如e:
#处理一个异常预文件。异常发生后,循环继续。
这使得它可以“尝试”循环中的每个文件一次,而不是“尝试”整个循环一次。如果发生异常,可以跳过该文件
for file in files():
try:
with open(file, 'rb+') as f:
plain_text = f.read()
cipher_text = self.token.encrypt(plain_text)
f.seek(0); f.truncate()
f.write(cipher_text)
except Exception as e:
print(f'skipping file {file}. Reason: {e}')
问题是您的尝试。。。除非
语句是循环中的第一件事,因此当执行该语句时,循环结束。尝试切换内部的,如下所示:
for i in range(0, len(files())):
for file in files():
try:
#code
except Exception as e:
print(e)
ש 您的代码实际上停止了对异常的循环。您的尝试..除了
覆盖太多。(补充:但为什么要在文件上使用双循环?@usr2564301这是我说的,我的代码在异常后停止,你有办法修复它吗?你在范围(0,len(files())中使用了for I:
但是在你的代码中没有使用ii如果你没有在for循环中使用索引,通常使用下划线作为伪变量,因此,对范围(x)内的uu使用:
,例外情况除外
被认为是不好的做法。嘿,在代码中,我向同一个文件写入了很多次。我剪切了外部代码并粘贴了相关的代码,这并不意味着你不需要其余的代码。