忽略例外的`for`声明

我列举了大量的字符集这样的字符(GB2312采取作为一个例子,但在实践中很多大):忽略例外的`for`声明

def get_gb2312_characters(): 

higher_range = range(0xb0, 0xf7 + 1)

lower_range = range(0xa1, 0xfe + 1)

# see http://en.wikipedia.org/wiki/GB_2312#Encodings_of_GB2312

for higher in higher_range:

for lower in lower_range:

encoding = (higher << 8) | lower

yield encoding.to_bytes(2, byteorder='big').decode(encoding='gb2312')

for c in get_gb2312_characters():

print(c)

这不会因为在那里工作是代码页中的一些“空白”(或“垃圾”字节组合)。当程序在最后的for行尝试从发生器中获取一个字符时,它将引发一个UnicodeDecodeError。问题是,我不能使用try...except涵盖for圈状

try: 

for c in gb2312:

print(c)

except UnicodeDecodeError:

pass

自循环将终止立即如果有例外,无论是使用一对for循环中像

for c in gb2312: 

try:

print(c)

except UnicodeDecodeError:

pass

因为异常不在内部引发。那么有什么方法可以解决这个问题?谢谢。

回答:

试试这个使用功能,这里面for循环:

for higher in higher_range: 

for lower in lower_range:

encoding = (higher << 8) | lower

try:

yield encoding.to_bytes(2, byteorder='big').decode(encoding='gb2312')

except UnicodeDecodeError:

pass

失败的值将被忽略,并生成器将只返回那些是有效的。

回答:

try exceptyield各地:

try: 

yield encoding.to_bytes(2, byteorder='big').decode(encoding='gb2312')

except UnicodeDecodeError:

# handle exception here

pass

以上是 忽略例外的`for`声明 的全部内容, 来源链接: utcz.com/qa/257838.html

回到顶部