python循环捕捉异常,在for循环python中捕获错误

I have a for loop on an avro data reader object

for i in reader:

print i

then I got a unicode decode error in the for statement so I wanted to ignore that particular record. So I did this

try:

for i in reader:

print i

except:

pass

but it does not continue further. How can I overcome this problem

Edit: Error trace added

Traceback (most recent call last):

File "modify.py", line 22, in

for record in reader:

File "/usr/lib/python2.6/site-packages/avro-1.7.7-py2.6.egg/avro/datafile.py", line 362, in next

datum = self.datum_reader.read(self.datum_decoder)

File "/usr/lib/python2.6/site-packages/avro-1.7.7-py2.6.egg/avro/io.py", line 445, in read

return self.read_data(self.writers_schema, self.readers_schema, decoder)

File "/usr/lib/python2.6/site-packages/avro-1.7.7-py2.6.egg/avro/io.py", line 490, in read_data

return self.read_record(writers_schema, readers_schema, decoder)

File "/usr/lib/python2.6/site-packages/avro-1.7.7-py2.6.egg/avro/io.py", line 690, in read_record

field_val = self.read_data(field.type, readers_field.type, decoder)

File "/usr/lib/python2.6/site-packages/avro-1.7.7-py2.6.egg/avro/io.py", line 468, in read_data

return decoder.read_utf8()

File "/usr/lib/python2.6/site-packages/avro-1.7.7-py2.6.egg/avro/io.py", line 233, in read_utf8

return unicode(self.read_bytes(), "utf-8")

UnicodeDecodeError: 'utf8' codec can't decode byte 0xb4 in position 14: invalid start byte

could it be due to the fact that the file was corrupted?

Edit2:

As per suggestion in answers to go through iterobject I modified code and got this error

Traceback (most recent call last):

File "modify.py", line 28, in

print next(iterobject)["filepath"]

File "/usr/lib/python2.6/site-packages/avro-1.7.7-py2.6.egg/avro/datafile.py", line 362, in next

datum = self.datum_reader.read(self.datum_decoder)

File "/usr/lib/python2.6/site-packages/avro-1.7.7-py2.6.egg/avro/io.py", line 445, in read

return self.read_data(self.writers_schema, self.readers_schema, decoder)

File "/usr/lib/python2.6/site-packages/avro-1.7.7-py2.6.egg/avro/io.py", line 490, in read_data

return self.read_record(writers_schema, readers_schema, decoder)

File "/usr/lib/python2.6/site-packages/avro-1.7.7-py2.6.egg/avro/io.py", line 690, in read_record

field_val = self.read_data(field.type, readers_field.type, decoder)

File "/usr/lib/python2.6/site-packages/avro-1.7.7-py2.6.egg/avro/io.py", line 468, in read_data

return decoder.read_utf8()

File "/usr/lib/python2.6/site-packages/avro-1.7.7-py2.6.egg/avro/io.py", line 233, in read_utf8

return unicode(self.read_bytes(), "utf-8")

File "/usr/lib/python2.6/site-packages/avro-1.7.7-py2.6.egg/avro/io.py", line 226, in read_bytes

return self.read(self.read_long())

File "/usr/lib/python2.6/site-packages/avro-1.7.7-py2.6.egg/avro/io.py", line 184, in read_long

b = ord(self.read(1))

TypeError: ord() expected a character, but string of length 0 found

解决方案

If your error is in for i in. Then try this, it will skip element in iterator if UnicodeDecodeError occurs.

iterobject = iter(reader)

while iterobject:

try:

print(next(iterobject))

except StopIteration:

break

except UnicodeDecodeError:

pass

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值