Python读取文件转int时报ValueError: '\ufeff615'如何解决?
错误原因
- 报错信息中的
\ufeff是UTF-8的字节顺序标记(BOM),属于不可见特殊字符,是in文件保存时选择了「带BOM的UTF-8」编码格式,系统自动写入到文件开头的标识 - 代码默认以普通无BOM的UTF-8规则读取文件,不会自动过滤这个标记,读取第一行内容时会把
\ufeff和后续的数字615拼接为一个字符串,无法被int()函数识别转换,因此抛出数值错误 - 额外说明:你给出的代码片段缺少
import sys的导入声明,即使解决BOM问题直接运行也会抛出NameError
修复方案
你可以任选以下任意一种方式修复:
- 方案1:修改文件编码
用文本编辑器(VS Code、记事本、Notepad++等)打开in文件,重新保存时选择「UTF-8(无BOM)」编码格式即可,无需修改代码即可正常运行得到预期输出。 - 方案2:修改代码适配带BOM的文件
打开文件时指定utf-8-sig编码,该编码会自动识别并移除开头的BOM标记,同时补全缺失的sys导入,修改后的完整代码如下:
import sys def testcase(number: int, solve_function): while (number != 0): solve_function() number -= 1 def map_input(datatype): return map(datatype, sys.stdin.readline().split()) # 仅修改打开文件的编码参数即可 sys.stdin = open('in', 'r', encoding='utf-8-sig') sys.stdout = open('out', 'w') def solve(): D, P = map_input(int) T = D / P + 37 print('%.3f'% T) testcase(1, solve)
运行修改后的代码,out文件中就会输出预期的92.909结果。
内容的提问来源于stack exchange,提问作者Nibras Shami
相关产品推荐
相关产品推荐

