Python 如何减少错误处理代码中的Try和Except语句
正在处理更新数据库的项目。从包含Excel文件的文件夹更新新值(行)。Excel文件中的值由员工提供。有时,这些员工在尝试更新数据库时仍在Excel文件中工作。这将导致许可错误 为了避免PermissionErrors,我使用Try和Except语句。这可以正常工作,但可能会出现Excel文件在一段时间内未关闭,并且在一天中打开多个Excel文件的情况 因此,仅仅一个Try-and-Except语句是行不通的。因此,我使用了三个Try-and-Except语句,它们仍然不能保证正确处理错误 为了解决这个问题,我认为for循环中的While循环或break语句可以工作吗?尝试在(第一个)块末尾添加break语句,但无效 有办法解决这个问题吗?添加更多的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语句,它们仍然不能保证正确处理错误 为了
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)