我在python循环的一次迭代中创建了大约200个变量(从excel文档中提取字段并将它们推送到SQL数据库中),我正试图找出一些问题。
假设一个迭代是一个Excel工作簿,我在一个目录中循环。我从每个工作簿中提取大约200个字段。
如果我提取其中一个字段(假设字段Š56/200)格式不正确(假设日期填写错误,即2015年9月31日,这不是一个真正的日期),它与我正在执行的操作出错。
我希望循环跳过该变量并继续创建变量#57。我不希望循环完全转到下一个迭代或工作簿,我只希望它忽略该变量上的错误,并继续使用该单个循环迭代的其余变量。
我该怎么做这样的事呢?
在这个示例代码中,我希望继续提取“PolicyState”,即使ExpirationDate有错误。
一些示例代码:
import datetime as dt
import os as os
import xlrd as rd
files = os.listdir(path)
for file in files: #Loop through all files in path directory
filename = os.fsdecode(file)
if filename.startswith('~'):
continue
elif filename.endswith( ('.xlsx', '.xlsm') ):
try:
book = rd.open_workbook(os.path.join(path,file))
except KeyError:
print ("Error opening file for "+ file)
continue
SoldModelInfo=book.sheet_by_name("SoldModelInfo")
AccountName=str(SoldModelInfo.cell(1,5).value)
ExpirationDate=dt.datetime.strftime(xldate_to_datetime(SoldModelInfo.cell(1,7).value),'%Y-%m-%d')
PolicyState=str(SoldModelInfo.cell(1,6).value)
print("Insert data of " + file +" was successful")
else:
continue
正如建议的那样,您可以在每个extract变量上使用多个
try
块,也可以使用自己的自定义函数简化它,该函数为您处理try
:这里我们使用^{} 重复多个函数,并将^{} 作为带参数的冻结函数传递。在
这可以帮助您的代码看起来整洁,而不会让大量的
try
块弄乱。但是,更好、更明确的方法是处理您预期可能会出错的字段。在使用多个try块。将每个可能出错的解码操作包装在自己的try块中,以捕获异常,执行某些操作,然后继续下一个操作。在
所以,基本上你需要把你的
xldate_to_datetime()
调用包装成try ... except
相关问题 更多 >
编程相关推荐