症状
解析失败并报 ParseIntError { kind: InvalidDigit } 或 cannot parse integer from empty string。可见值往往看似数字,说明其中存在隐藏字符。
诊断
用 debug 格式打印以暴露空白:
let raw = "42\n";
println!("{raw:?}"); // "42\n"
let n: i64 = raw.trim().parse()?;
若涉及十六进制等,检查进制。
修复
去除首尾空白并选择正确进制:
let n: i64 = raw.trim().parse()?;
let hex = i64::from_str_radix("ff", 16)?; // 255
当来源混入千位分隔符时,解析前先做规范化。
验证
用原输入重跑,解析成功。补一个断言 " 42\n".trim().parse::<i64>() == Ok(42) 的单元测试,把去空白的必要性固化下来。