我列舉了大量的字符集這樣的字符(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'環路這樣做失敗的? – Floris
@弗洛伊斯我已更新我的帖子以消除歧義。 – ziyuang