Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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 如何减少错误处理代码中的Try和Except语句_Python_Excel_Error Handling - Fatal编程技术网

Python 如何减少错误处理代码中的Try和Except语句

Python 如何减少错误处理代码中的Try和Except语句,python,excel,error-handling,Python,Excel,Error Handling,正在处理更新数据库的项目。从包含Excel文件的文件夹更新新值(行)。Excel文件中的值由员工提供。有时,这些员工在尝试更新数据库时仍在Excel文件中工作。这将导致许可错误 为了避免PermissionErrors,我使用Try和Except语句。这可以正常工作,但可能会出现Excel文件在一段时间内未关闭,并且在一天中打开多个Excel文件的情况 因此,仅仅一个Try-and-Except语句是行不通的。因此,我使用了三个Try-and-Except语句,它们仍然不能保证正确处理错误 为了

正在处理更新数据库的项目。从包含Excel文件的文件夹更新新值(行)。Excel文件中的值由员工提供。有时,这些员工在尝试更新数据库时仍在Excel文件中工作。这将导致许可错误

为了避免PermissionErrors,我使用Try和Except语句。这可以正常工作,但可能会出现Excel文件在一段时间内未关闭,并且在一天中打开多个Excel文件的情况

因此,仅仅一个Try-and-Except语句是行不通的。因此,我使用了三个Try-and-Except语句,它们仍然不能保证正确处理错误

为了解决这个问题,我认为for循环中的While循环或break语句可以工作吗?尝试在(第一个)块末尾添加break语句,但无效

有办法解决这个问题吗?添加更多的Try和Except语句会起作用,但这似乎很愚蠢

if update_number_files == 0:
    print("No new files to update")
elif update_number_files >= 1:
    print("Update error")
else:
    print(str(abs(update_number_files)) + " files will be updated")
    for file in selected_update_files:
        try:
            dfs = pd.read_excel(file, "Sheet2")
        except PermissionError:
            print("PermissionError")
            time.sleep(300)
            try:
                dfs = pd.read_excel(file, "Sheet2")
            except PermissionError:
                print("PermissionError")
                time.sleep(300)
                try:
                    dfs = pd.read_excel(file, "Sheet2")
                except PermissionError:
                    print("PermissionError")
                    time.sleep(300)
                    dfs = pd.read_excel(file, "Sheet2")
        New_file.append(dfs)
        join = pd.concat(New_file)

这显然是迭代代码,而不是级联依赖项。是的,使用循环


这能解决您的问题吗?

您提出的
循环方法应该可行,但是,您提到了员工,而这整个建议似乎太脆弱,无法在现实世界中使用,也就是说,我不希望我的薪水取决于它。我认为循环应该按相反的顺序排列,以符合原始代码的意图。@KarlKnechtel[插入头部拍击]。我又在从里到外编码了。谢谢。@Prune谢谢!将最后一段代码更改为:if dfs为None。现在我可以给我的员工发工资了;)是的--
not dfs
dfs is None
对您来说应该是等效的,但是
is None
在出现“错误”数据帧结果时更安全。哦。。。记住接受答案,这样问题就可以正确存档。支持投票是值得赞赏的,但清理问题生命周期更为重要。
max_attempt = 3

for file in selected_update_files:
    dfs = None
    for attempt in range(max_attempt):
        try:
            dfs = pd.read_excel(file, "Sheet2")
        except PermissionError:
            print("PermissionError on read attempt", attempt)
            time.sleep(300)

    if not dfs:
        print("Failed to read", file)