python - 在try中捕获异常后如何继续循环...除了
问题描述
我正在分块读取一个大文件,并且正在对每个块进行一些操作。在阅读其中一个获取它们时,我收到以下消息错误:
pandas.errors.ParserError:数据标记错误。C 错误:预期 15929977 行中有 26 个字段,看到 118
这意味着我的文件行之一与其他文件行的格式不同。我认为我能做的就是省略这块,但我找不到办法做到这一点。我试图做一个try/except
块如下:
data = pd.read_table('ny_data_file.txt', sep=',',
header=0, encoding = 'latin1', chunksize = 5000)
try:
for chunk in data:
# operations
except pandas.errors.ParseError:
# Here is my problem
我在这里写的是我的问题是,如果没有很好地解析块,我的代码将自动进入异常,甚至不进入 for 循环,但我想要的是跳过这个块并前进到下一个,我想在其上执行循环内的操作。
我检查了stackoverflow,但在for循环上执行尝试时找不到类似的东西。任何帮助,将不胜感激。
更新:
我已尝试按照评论中的建议进行操作:
try:
for chunk in data:
#operations
except pandas.errors.ParserError:
# continue/pass/handle error
但仍然没有捕获异常,因为如上所述,异常是在从我的数据中获取 chyunk 时创建的,而不是在对其进行操作时创建的。
解决方案
如果在其中捕获异常,您使用的方式try - except
会使其跳过整个 for 循环。如果您只想跳过一次迭代,则需要在循环内编写 try-except ,如下所示:
for chunk in data:
try:
# operations
except pandas.errors.ParseError as e:
# inform the user of the error
print("Error encountered while parsing chunk {}".format(chunk))
print(e)
推荐阅读
- github - 为什么我的 github repo 无法在 google 中搜索到?
- git - 在 gitattributes 中使用 `**/` 匹配目录
- python - 如何将字典列表转换为具有特定标准的数据框?
- ruby - ruby 中的格式化字符串
- beautifulsoup - Beautiful Soup XML 解析安全
- slack - slack api 将应用程序邀请到私人频道
- angular - API fetch 中的模板文字不会在 Angular 中传递数据
- python - 如何使用python将元素附加到for循环中的空列表?
- ios - iOS - 更新 CFBundleURLName 和 CFBundleURLSchemes
- windows - 如何在 UWP 应用程序中创建应用程序范围的键盘快捷键,以取代子 XAML 元素具有的任何按键处理程序?