为了账号安全,请及时绑定邮箱和手机立即绑定

如何检查函数返回的错误类型(strconv.Atoi)

如何检查函数返回的错误类型(strconv.Atoi)

Go
慕哥9229398 2022-06-21 16:08:32
我有以下测试的基本代码strconv.Atoi():package mainimport (        "fmt"        "strconv")func main() {        var a int        var b string        var err Error        b = "32"        a,err = strconv.Atoi(b)        fmt.Println(a)        fmt.Println(err)}我想处理是否存在错误strconv.Atoi(),特别是如果错误是由于语法或范围,strconv.Atoi()可以提供的条件。为此,我尝试了以下方法:package mainimport (        "os"        "fmt"        "strconv")func main() {        var a int        var b string        var err error        b = "32"        a,err = strconv.Atoi(b)        if(err.Err == ErrSyntax) {                fmt.Println("ERROR")                os.Exit(1)        }        fmt.Println(a)        fmt.Println(err)}我得到了这个结果:% go build test.go# command-line-arguments./test.go:19:8: err.Err undefined (type error has no field or method Err)./test.go:19:16: undefined: ErrSyntax我想了解如何处理这两个错误Atoi可以返回(ErrSyntax,ErrRange)。
查看完整描述

2 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

您可以使用errors包(使用 Go 1.13 中的错误):


if errors.Is(err, strconv.ErrSyntax) {

    fmt.Println("syntax error")

    os.Exit(1)

}


查看完整回答
反对 回复 2022-06-21
?
慕森王

TA贡献1777条经验 获得超3个赞

包的包文档显示没有包限定符的名称,要从其他地方使用它们,您必须限定它们。所以试试strconv.ErrSyntax。


但这不会有太大帮助,因为没有.Err通用错误接口的成员。要检查这一点,您必须知道返回的错误实际上是一个strconv.*NumError. 根据文档,它应该是。


https://play.golang.org/p/UKL6kKDqSx4


    if err != nil && err.(*strconv.NumError).Err == strconv.ErrSyntax {

        fmt.Println("syntax error")

        os.Exit(1)

    }


查看完整回答
反对 回复 2022-06-21
  • 2 回答
  • 0 关注
  • 150 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信