可以安全地假设从 strconv.Parse* 函数返回的任何错误一定是由于错误的输入数据造成的吗?
可以安全地假设从strconv.Parse函数返回的任何错误一定是由于错误的输入数据造成的吗?这个问题涉及到了对于strconv.Parse函数的错误处理的理解。通常情况下,strconv.Parse函数返回的错误确实是由于输入数据不符合预期格式而导致的。然而,也有一些特殊情况需要考虑。一些错误可能是由于输入数据的类型错误,例如将字符串转换为整数时,字符串中包含了非数字字符。此外,还有一些边界情况,例如整数溢出或浮点数精度丢失,也可能导致错误的返回值。因此,对于从strconv.Parse函数返回的错误,我们不能完全假设是由于错误的输入数据造成的,而是需要综合考虑其他可能的因素。
问题内容
在最近的一次代码审查中,审查者对我如何处理从 strconv.ParseUint()
返回的错误提出了疑问。该函数被记录为返回转换后的 uint 值和 *strconv.NumError
具体类型的错误。文档提到了可以返回的该类型的两个哨兵错误(ErrSyntax
和 ErrRange
),这两个错误都意味着向其提供了错误数据。根据该函数的接口,也可能出现任何其他错误。
对于我的用例,我需要知道我拥有的字符串值是否值得转换为 uint。如果 ParseUint
返回错误,并且它是哨兵错误之一,那么我得到了答案。但如果返回的错误不是这些,那么我返回它并停止执行。我的审阅者断言,我应该假设从 ParseUint
返回的任何错误意味着我给了它错误的数据,并且不需要检查哨兵错误,没有理由检查哨兵错误,也不会返回该错误(在我的用例中)。他们链接到 go 标准库中的一个示例,其中来自 ParseUint
的错误被视为对错误输入数据的检查并且从未返回,并表示有很多这样的示例。
虽然我当然可以理解,一定存在一种算法,只要提供良好的数据和足够的资源,就始终能够计算出所需的结果,但现实世界并不总是符合理论理想。我在图书馆的文档中找不到任何内容表明它不会也永远不会因除错误数据之外的任何其他原因返回错误。标准库有一个或者可能有很多这样的例子,一方面令人放心,另一方面令人恐惧,介于“两个错误不能构成正确”和“他们正在这样做,所以对我们来说一定是安全的”之间在这种情况下也这样做。
这只是图书馆文档缺少一句话的情况吗?或者当这两个错误都不是时返回错误是好的吗?我该如何推理?
解决方法
是的,可以安全地假设 strconv.ParseXXX
函数的错误是由于错误的输入数据造成的。
从您提到的文档页面:
我阅读此内容的方式是“strconv.ParseXXX 中的任何错误都是 NumError
,并且可能是由于无效数字或位大小范围错误”。我的理解是,godocs 试图尽可能完整地概述函数调用的期望范围。
因此,我认为可以安全地假设这些是您可能会看到从 strconv.ParseXXX
函数返回的唯一错误。如果有其他东西回来,我会认为它是一个文档错误。
回答您的最后一个问题:您在标准库调用此函数时观察到的模式是正确的。返回整个错误并让调用者决定如何处理它。哨兵错误旨在帮助您了解出了什么问题,并代表了这些函数可能出现的错误的全部范围。
以上是可以安全地假设从 strconv.Parse* 函数返回的任何错误一定是由于错误的输入数据造成的吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

C++ 中获取绝对值的方法有两种:1. 使用内置函数 abs(),获取整型或浮点型的绝对值;2. 使用泛型函数 std::abs(),获取各类支持绝对值运算数据类型的绝对值。

complex 类型用于表示 C 语言中的复数,包含实部和虚部。其初始化形式为 complex_number = 3.14 + 2.71i,实部可通过 creal(complex_number) 访问,虚部可通过 cimag(complex_number) 访问。该类型支持常用的数学运算,如加、减、乘、除和取模。此外,还提供了一组用于处理复数的函数,如 cpow、csqrt、cexp 和 csin。

prime 是 C++ 中的关键字,表示质数类型,只能被 1 和本身整除,用作布尔类型指示给定值是否为质数,为质数则为 true,否则为 false。

std 是 C++ 中包含标准库组件的命名空间。为了使用 std,需要使用 "using namespace std;" 语句。直接使用 std 命名空间中的符号可以简化代码,但建议仅在需要时使用,以避免命名空间污染。

fabs() 函数是 C++ 中的一个数学函数,用于计算浮点数的绝对值,去除负号并返回正值。它接受一个浮点参数,并返回一个 double 类型的绝对值。例如,fabs(-5.5) 将返回 5.5。该函数适用于浮点数,其精度受底层硬件影响。

Config 在 Java 中表示配置信息,用于调整应用程序行为,通常存储在外部文件中或数据库中,可通过 Java Properties、PropertyResourceBundle、Java Configuration Framework 或第三方库进行管理,其好处包括解耦、灵活性、环境意识、可管理性、可扩展性。

C++ 中的 min 函数可返回多个值中的最小值。其语法为:min(a, b),其中 a 和 b 为要比较的值。还可以指定一个比较函数,以支持不支持 < 运算符的类型。C++20 引入了 std::clamp 函数,可处理三个或更多值的最小值。

在 C++ 中求绝对值有三种方法:使用 abs() 函数,可计算任何类型数字的绝对值。使用 std::abs() 函数,可计算整数、浮点数和复数的绝对值。手动计算绝对值,适用于简单的整数。
