目录
问题内容
解决方法
首页 后端开发 Golang 可以安全地假设从 strconv.Parse* 函数返回的任何错误一定是由于错误的输入数据造成的吗?

可以安全地假设从 strconv.Parse* 函数返回的任何错误一定是由于错误的输入数据造成的吗?

Feb 15, 2024 am 11:30 AM
标准库

可以安全地假设从 strconv.Parse* 函数返回的任何错误一定是由于错误的输入数据造成的吗?

可以安全地假设从strconv.Parse函数返回的任何错误一定是由于错误的输入数据造成的吗?这个问题涉及到了对于strconv.Parse函数的错误处理的理解。通常情况下,strconv.Parse函数返回的错误确实是由于输入数据不符合预期格式而导致的。然而,也有一些特殊情况需要考虑。一些错误可能是由于输入数据的类型错误,例如将字符串转换为整数时,字符串中包含了非数字字符。此外,还有一些边界情况,例如整数溢出或浮点数精度丢失,也可能导致错误的返回值。因此,对于从strconv.Parse函数返回的错误,我们不能完全假设是由于错误的输入数据造成的,而是需要综合考虑其他可能的因素。

问题内容

在最近的一次代码审查中,审查者对我如何处理从 strconv.ParseUint() 返回的错误提出了疑问。该函数被记录为返回转换后的 uint 值和 *strconv.NumError 具体类型的错误。文档提到了可以返回的该类型的两个哨兵错误(ErrSyntaxErrRange),这两个错误都意味着向其提供了错误数据。根据该函数的接口,也可能出现任何其他错误。

对于我的用例,我需要知道我拥有的字符串值是否值得转换为 uint。如果 ParseUint 返回错误,并且它是哨兵错误之一,那么我得到了答案。但如果返回的错误不是这些,那么我返回它并停止执行。我的审阅者断言,我应该假设从 ParseUint 返回的任何错误意味着我给了它错误的数据,并且不需要检查哨兵错误,没有理由检查哨兵错误,也不会返回该错误(在我的用例中)。他们链接到 go 标准库中的一个示例,其中来自 ParseUint 的错误被视为对错误输入数据的检查并且从未返回,并表示有很多这样的示例。

虽然我当然可以理解,一定存在一种算法,只要提供良好的数据和足够的资源,就始终能够计算出所需的结果,但现实世界并不总是符合理论理想。我在图书馆的文档中找不到任何内容表明它不会也永远不会因除错误数据之外的任何其他原因返回错误。标准库有一个或者可能有很多这样的例子,一方面令人放心,另一方面令人恐惧,介于“两个错误不能构成正确”和“他们正在这样做,所以对我们来说一定是安全的”之间在这种情况下也这样做。

这只是图书馆文档缺少一句话的情况吗?或者当这两个错误都不是时返回错误是好的吗?我该如何推理?

解决方法

是的,可以安全地假设 strconv.ParseXXX 函数的错误是由于错误的输入数据造成的。

从您提到的文档页面:

我阅读此内容的方式是“strconv.ParseXXX 中的任何错误都是 NumError ,并且可能是由于无效数字或位大小范围错误”。我的理解是,godocs 试图尽可能完整地概述函数调用的期望范围。

因此,我认为可以安全地假设这些是您可能会看到从 strconv.ParseXXX 函数返回的唯一错误。如果有其他东西回来,我会认为它是一个文档错误。

回答您的最后一个问题:您在标准库调用此函数时观察到的模式是正确的。返回整个错误并让调用者决定如何处理它。哨兵错误旨在帮助您了解出了什么问题,并代表了这些函数可能出现的错误的全部范围。

以上是可以安全地假设从 strconv.Parse* 函数返回的任何错误一定是由于错误的输入数据造成的吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

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

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

c++中绝对值怎么用 c++中绝对值怎么用 May 06, 2024 pm 06:15 PM

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

_complex在c语言中的用法 _complex在c语言中的用法 May 08, 2024 pm 01:27 PM

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

c++中prime什么意思 c++中prime什么意思 May 07, 2024 pm 11:33 PM

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

c++中std::怎么用 c++中std::怎么用 May 09, 2024 am 03:45 AM

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

c++中fabs是什么意思 c++中fabs是什么意思 May 08, 2024 am 01:15 AM

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

config在java中什么意思 config在java中什么意思 May 07, 2024 am 02:39 AM

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

c++中min是什么意思 c++中min是什么意思 May 08, 2024 am 12:51 AM

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

c++中绝对值怎么打 c++中绝对值怎么打 May 06, 2024 pm 06:21 PM

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

See all articles