python syntaxerror unexpected eof的错误处理( IllegalCharacterError)
写了这样一段Python代码,用于将内容写入Excel。 其中self.keylist / self.valuelist 有30个值。但是在轮询写入第23个值的时候,直接跳出,报错“IllegalCharacterError”。 Debug过程将self.valuelist 的值单独复制出来未发现有什么异常。
def writetoExcel(self):
self.check_exist_excel(EXCEL_PATH)
print("EXCEL_PATH is :", EXCEL_PATH)
wb = openpyxl.load_workbook(EXCEL_PATH)
ws = wb.get_sheet_by_name(self.str_today)
ws.cell(1, 1).value = "程序名称"
ws.cell(1, 2).value = "内存统计"
row_num = len(self.keylist)
for row in range(2, row_num + 1):
if self.keylist[row - 2] == '':
self.keylist[row - 2] = 'This name is empty!'
if self.valuelist[row - 2] == '':
self.valuelist[row - 2] = 'This value is empty'
ws.cell(row, 1).value = self.keylist[row - 2]
ws.cell(row, 2).value = self.valuelist[row - 2]
# print(row) #调试用
wb.save(self.excel_result_path)
后来跟踪到cell.py 中的ILLEGAL_CHARACTERS_RE 发现
ILLEGAL_CHARACTERS_RE = re.compile(r'[\000-\010]|[\013-\014]|[\016-\037]')
ERROR_CODES = ('#NULL!', '#DIV/0!', '#VALUE!', '#REF!', '#NAME?', '#NUM!',
'#N/A')
这里的compile是八进制的ASCII码,说明我获取的内容vauelist 中肯定是
包含了这样的被认定在Excel中是非法字符的字符。
因此将基础方法 check_string 中raise IllegalCharacterError 注释掉,同时加上value = ILLEGAL_CHARACTERS_RE.sub(r’’,value) 这样,执行脚本的时候就可以继续进行了
def check_string(self, value):
"""Check string coding, length, and line break character"""
if value is None:
return
# convert to str string
if not isinstance(value, str):
value = str(value, self.encoding)
value = str(value)
# string must never be longer than 32,767 characters
# truncate if necessary
value = value[:32767]
if next(ILLEGAL_CHARACTERS_RE.finditer(value), None):
**# 如果发现包含非法字符,则替换为空。
value = ILLEGAL_CHARACTERS_RE.sub(r'',value)
# raise IllegalCharacterError**
return value