Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在except之后继续函数_Python - Fatal编程技术网

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使用
,例外情况除外
被认为是不好的做法。嘿,在代码中,我向同一个文件写入了很多次。我剪切了外部代码并粘贴了相关的代码,这并不意味着你不需要其余的代码。