Table des matières
Contenu de la question
Solution
Maison développement back-end Golang Est-il prudent de supposer que les erreurs renvoyées par les fonctions strconv.Parse* doivent être dues à de mauvaises données d'entrée ?

Est-il prudent de supposer que les erreurs renvoyées par les fonctions strconv.Parse* doivent être dues à de mauvaises données d'entrée ?

Feb 15, 2024 am 11:30 AM
bibliothèque standard

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

Est-il prudent de supposer que toute erreur renvoyée par la fonction strconv.Parse doit être due à de mauvaises données d'entrée ? Cette question implique la compréhension de la gestion des erreurs de la fonction strconv.Parse. Généralement, l'erreur renvoyée par la fonction strconv.Parse est en effet provoquée par le fait que les données d'entrée ne sont pas au format attendu. Cependant, certaines circonstances particulières doivent être prises en compte. Certaines erreurs peuvent être dues à un type de données d'entrée incorrect, par exemple lors de la conversion d'une chaîne en nombre entier et que la chaîne contient des caractères non numériques. De plus, il existe des cas extrêmes, tels qu'un dépassement d'entier ou une perte de précision en virgule flottante, qui peuvent également entraîner des valeurs de retour erronées. Par conséquent, pour les erreurs renvoyées par la fonction strconv.Parse, nous ne pouvons pas entièrement supposer qu'elles sont causées par des données d'entrée incorrectes, mais nous devons prendre en compte d'autres facteurs possibles.

Contenu de la question

Lors d'une récente révision du code, le réviseur m'a demandé comment j'avais géré l'erreur de strconv.ParseUint() 返回的错误提出了疑问。该函数被记录为返回转换后的 uint 值和 *strconv.NumError 具体类型的错误。文档提到了可以返回的该类型的两个哨兵错误(ErrSyntaxErrRange), ce qui signifiait tous deux qu'il recevait des données incorrectes. Selon l'interface de la fonction, toute autre erreur peut également survenir.

Pour mon cas d'utilisation, j'ai besoin de savoir si la valeur de chaîne que j'ai vaut la peine d'être convertie en uint. Une erreur si ParseUint 返回错误,并且它是哨兵错误之一,那么我得到了答案。但如果返回的错误不是这些,那么我返回它并停止执行。我的审阅者断言,我应该假设从 ParseUint 返回的任何错误意味着我给了它错误的数据,并且不需要检查哨兵错误,没有理由检查哨兵错误,也不会返回该错误(在我的用例中)。他们链接到 go 标准库中的一个示例,其中来自 ParseUint est traité comme une vérification de mauvaises données d'entrée et n'est jamais renvoyé, indiquant qu'il existe de nombreux exemples de cela.

Bien que je puisse certainement comprendre qu'il doit y avoir un algorithme capable de toujours calculer le résultat souhaité avec de bonnes données et suffisamment de ressources, le monde réel ne correspond pas toujours à l'idéal théorique. Je ne trouve rien dans la documentation de la bibliothèque indiquant qu'elle ne renvoie pas et ne renverra jamais d'erreur pour une raison autre que des données incorrectes. La bibliothèque standard en contient un ou probablement plusieurs exemples, ce qui est rassurant d'un côté et terrifiant de l'autre, quelque part entre "deux torts ne font pas un bien" et "ils font les choses de cette façon, donc il faut soyez en sécurité pour nous. La même chose est faite dans ce cas.

Est-ce simplement le cas d'une phrase manquante dans la documentation de la bibliothèque ? Ou est-il bon de renvoyer une erreur alors qu’il ne s’agit d’aucune de ces deux erreurs ? Comment raisonner ?

Solution

Oui, il est prudent de supposer que l'erreur dans la fonction strconv.ParseXXX est due à de mauvaises données d'entrée.

Depuis la page de documentation que vous avez mentionnée :

La façon dont je lis ceci est "toutes les erreurs dans strconv.ParseXXX sont NumError et peuvent être dues à des nombres invalides ou à des erreurs de plage de tailles de bits". Je crois comprendre que les godocs essaient de décrire aussi complètement que possible la portée attendue d'un appel de fonction.

Je pense donc qu'il est prudent de supposer que ce sont les strconv.ParseXXXseules erreurs que vous pourriez voir renvoyées par une fonction . Si quelque chose d'autre revient, je considérerais cela comme un bug de documentation.

Pour répondre à votre dernière question : le modèle que vous avez observé lors de l'appel de cette fonction depuis la bibliothèque standard est correct. Renvoyez l’intégralité de l’erreur et laissez l’appelant décider quoi en faire. Les erreurs Sentinel sont conçues pour vous aider à comprendre ce qui n’a pas fonctionné et représentent l’ensemble des erreurs pouvant survenir avec ces fonctions.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser la valeur absolue en C++ Comment utiliser la valeur absolue en C++ May 06, 2024 pm 06:15 PM

Il existe deux manières d'obtenir des valeurs absolues en C++ : 1. Utilisez la fonction intégrée abs() pour obtenir la valeur absolue d'un type entier ou à virgule flottante 2. Utilisez la fonction générique std::abs() pour ; obtenir diverses valeurs absolues prises en charge. Fonctionne sur les valeurs absolues des types de données.

_utilisation complexe en langage C _utilisation complexe en langage C May 08, 2024 pm 01:27 PM

Le type complexe est utilisé pour représenter des nombres complexes en langage C, y compris des parties réelles et imaginaires. Sa forme d'initialisation est complex_number = 3.14 + 2.71i, la partie réelle est accessible via creal(complex_number) et la partie imaginaire est accessible via cimag(complex_number). Ce type prend en charge les opérations mathématiques courantes telles que l'addition, la soustraction, la multiplication, la division et le modulo. De plus, un ensemble de fonctions permettant de travailler avec des nombres complexes est fourni, telles que cpow, csqrt, cexp et csin.

Que signifie premier en C++ Que signifie premier en C++ May 07, 2024 pm 11:33 PM

prime est un mot-clé en C++, indiquant le type de nombre premier, qui ne peut être divisé que par 1 et lui-même. Il est utilisé comme type booléen pour indiquer si la valeur donnée est un nombre premier. S'il s'agit d'un nombre premier, c'est le cas. vrai, sinon c'est faux.

Comment utiliser std :: en C++ Comment utiliser std :: en C++ May 09, 2024 am 03:45 AM

std est l'espace de noms en C++ qui contient les composants de la bibliothèque standard. Pour utiliser std, utilisez l'instruction "using namespace std;". L'utilisation de symboles directement à partir de l'espace de noms std peut simplifier votre code, mais n'est recommandée que lorsque cela est nécessaire pour éviter la pollution de l'espace de noms.

Que signifie fabs en C++ Que signifie fabs en C++ May 08, 2024 am 01:15 AM

La fonction fabs() est une fonction mathématique en C++ qui calcule la valeur absolue d'un nombre à virgule flottante, supprime le signe négatif et renvoie une valeur positive. Il accepte un paramètre à virgule flottante et renvoie une valeur absolue de type double. Par exemple, fabs(-5.5) renvoie 5,5. Cette fonction fonctionne avec des nombres à virgule flottante, dont la précision est affectée par le matériel sous-jacent.

Que signifie la configuration en Java ? Que signifie la configuration en Java ? May 07, 2024 am 02:39 AM

Config représente les informations de configuration en Java et est utilisé pour ajuster le comportement de l'application. Il est généralement stocké dans des fichiers ou des bases de données externes et peut être géré via Java Properties, PropertyResourceBundle, Java Configuration Framework ou des bibliothèques tierces. Ses avantages incluent le découplage et la flexibilité. sensibilisation à l'environnement, gérabilité, évolutivité.

Comment calculer la valeur absolue en C++ Comment calculer la valeur absolue en C++ May 06, 2024 pm 06:21 PM

Il existe trois façons de trouver la valeur absolue en C++ : À l’aide de la fonction abs(), vous pouvez calculer la valeur absolue de n’importe quel type de nombre. À l'aide de la fonction std::abs(), vous pouvez calculer la valeur absolue d'entiers, de nombres à virgule flottante et de nombres complexes. Calcul manuel de valeurs absolues, adapté aux entiers simples.

Que signifie min en C++ Que signifie min en C++ May 08, 2024 am 12:51 AM

La fonction min en C++ renvoie le minimum de plusieurs valeurs. La syntaxe est : min(a, b), où a et b sont les valeurs à comparer. Vous pouvez également spécifier une fonction de comparaison pour prendre en charge les types qui ne prennent pas en charge l'opérateur <. C++20 a introduit la fonction std::clamp, qui gère le minimum de trois valeurs ou plus.

See all articles