>  기사  >  백엔드 개발  >  strconv.Parse* 함수에서 반환된 모든 오류는 잘못된 입력 데이터로 인해 발생한다고 가정해도 안전합니까?

strconv.Parse* 함수에서 반환된 모든 오류는 잘못된 입력 데이터로 인해 발생한다고 가정해도 안전합니까?

王林
王林앞으로
2024-02-15 11:30:11879검색

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

strconv.Parse 함수에서 반환된 오류가 잘못된 입력 데이터로 인해 발생했다고 가정해도 안전합니까? 이 질문에는 strconv.Parse 함수의 오류 처리에 대한 이해가 필요합니다. 일반적으로 strconv.Parse 함수에서 반환되는 오류는 실제로 입력 데이터가 예상된 형식이 아니기 때문에 발생합니다. 그러나 고려해야 할 몇 가지 특별한 상황이 있습니다. 일부 오류는 문자열을 정수로 변환하고 문자열에 숫자가 아닌 문자가 포함된 경우와 같이 잘못된 유형의 입력 데이터로 인해 발생할 수 있습니다. 또한 정수 오버플로 또는 부동 소수점 정밀도 손실과 같은 예외적인 경우가 있어 잘못된 반환 값이 발생할 수도 있습니다. 따라서 strconv.Parse 함수에서 반환된 오류에 대해 잘못된 입력 데이터로 인해 발생했다고 완전히 가정할 수는 없지만 다른 가능한 요인을 고려해야 합니다.

질문 내용

최근 코드 리뷰에서 리뷰어가 strconv.ParseUint() 返回的错误提出了疑问。该函数被记录为返回转换后的 uint 值和 *strconv.NumError 具体类型的错误。文档提到了可以返回的该类型的两个哨兵错误(ErrSyntaxErrRange)의 오류를 어떻게 처리했는지 물었는데, 둘 다 잘못된 데이터가 공급되고 있다는 의미였습니다. 함수의 인터페이스에 따라 다른 오류가 발생할 수도 있습니다.

내 사용 사례에서는 내가 가지고 있는 문자열 값이 단위로 변환할 가치가 있는지 알아야 합니다. ParseUint 返回错误,并且它是哨兵错误之一,那么我得到了答案。但如果返回的错误不是这些,那么我返回它并停止执行。我的审阅者断言,我应该假设从 ParseUint 返回的任何错误意味着我给了它错误的数据,并且不需要检查哨兵错误,没有理由检查哨兵错误,也不会返回该错误(在我的用例中)。他们链接到 go 标准库中的一个示例,其中来自 ParseUint가 잘못된 입력 데이터에 대한 검사로 처리되어 반환되지 않는 경우 오류가 발생합니다. 이는 이에 대한 예가 많다는 것을 나타냅니다.

좋은 데이터와 충분한 리소스가 주어지면 항상 원하는 결과를 계산할 수 있는 알고리즘이 있어야 한다는 점은 확실히 이해할 수 있지만, 현실 세계가 항상 이론적 이상과 일치하는 것은 아닙니다. 라이브러리 문서에서 잘못된 데이터 이외의 어떤 이유로든 오류를 반환하지 않으며 결코 반환하지 않는다는 내용을 찾을 수 없습니다. 표준 라이브러리에는 이에 대한 하나 또는 아마도 많은 예가 있습니다. 이는 한편으로는 안심이 되지만 다른 한편으로는 두려운 것입니다. "두 가지 잘못은 옳지 않습니다"와 "그들이 이런 식으로 하고 있으므로 반드시 그렇게 해야 합니다" 사이의 어딘가에 있습니다. 우리를 위해 안전하세요 이 경우에도 마찬가지입니다.

도서관 문서에 문장이 누락된 경우인가요? 아니면 이 두 오류 중 어느 것도 아닐 때 오류를 반환하는 것이 좋은가요? 어떻게 추론해야 합니까?

Solution

예, strconv.ParseXXX 함수의 오류는 잘못된 입력 데이터로 인한 것이라고 가정하는 것이 안전합니다.

당신이 언급한 문서 페이지에서:

내가 읽은 방식은 "strconv.ParseXXX의 모든 오류는 NumError 잘못된 숫자 또는 비트 크기 범위 오류로 인해 발생할 수 있습니다"입니다. 내가 이해하는 바는 godocs가 함수 호출의 예상 범위를 최대한 완벽하게 설명하려고 한다는 것입니다.

그래서 이것이 strconv.ParseXXX함수에서 반환된 오류를 볼 수 있는 유일한 오류라고 가정해도 안전할 것 같습니다. 다른 것이 다시 나타나면 문서 버그로 간주합니다.

마지막 질문에 답하려면 표준 라이브러리에서 이 함수를 호출할 때 관찰한 패턴이 정확합니다. 전체 오류를 반환하고 호출자가 이를 어떻게 처리할지 결정하도록 합니다. Sentinel 오류는 무엇이 잘못되었는지 이해하고 이러한 기능에서 발생할 수 있는 전체 오류 범위를 나타내는 데 도움이 되도록 설계되었습니다.

위 내용은 strconv.Parse* 함수에서 반환된 모든 오류는 잘못된 입력 데이터로 인해 발생한다고 가정해도 안전합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제