[PYTHON] Comment spécifier un nombre infini de tolérances dans le contrôle de validation d'argument numérique d'argparse

Il existe argparse en tant que bibliothèque standard qui prend en charge le traitement lié aux arguments des scripts Python. Avec argparse, vous pouvez ajouter des arguments valides avec des contrôles de validation. Cette fois, je décrirai comment spécifier l'argument de "il existe une plage valide de valeurs numériques" avec argparse.

Présentation d'argparse

argparse est une bibliothèque Python qui analyse les options et arguments de ligne de commande. Il est disponible depuis Python 2.7 et est inclus en tant que bibliothèque standard (vous n'avez donc pas à vous soucier d'utiliser pip et vous n'avez pas à ajouter "Veuillez mettre cette bibliothèque" lors de sa distribution à d'autres utilisateurs).

Documentation officielle Python Argparse https://docs.python.jp/3/library/argparse.html

Outre argparse, il existe les bibliothèques Python suivantes qui effectuent ce type d'analyse.

Analyseur d'options que Pythonista connaît http://qiita.com/petitviolet/items/aad73a24f41315f78ee4

Vérifiez la tolérance

Pour inclure le traitement de l'analyse des arguments à l'aide d'argparse, implémentez comme suit. (Ce qui suit ajoute l'option de valeur entière "-s".)

Exemple de vérification d'argument.py


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='LightsOut Solver')
    parser.add_argument('-s', type=int, help='LightsOut Size')

ʻSi vous spécifiez string ou int dans l'argument type de ArgumentParser # add_argument`, il vérifiera si la valeur spécifiée comme argument peut être traitée comme ce type.

Afin de spécifier une "plage de tolérance" comme condition pour ajouter des arguments comme décrit ci-dessus, il est possible de saisir une valeur indiquant la plage de tolérance dans l'argument choice de ʻArgumentParser # add_argument`.

Exemple de vérification d'argument2.py


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='LightsOut Solver')
    parser.add_argument('-s', type=int, choice=range(1,6), help='LightsOut Size')

Cependant, seules les «choses qui peuvent être représentées dans un tableau» peuvent recevoir une valeur solide pour ce choix. En d'autres termes, seul un nombre fini de plages peut être réduit. Pour spécifier un nombre infini de plages (par exemple, "entier de 2 ou plus" ou "nombre réel de 0 ou plus et 1 ou moins"), "fonction pour juger si la valeur est acceptable" au lieu de "tableau pour spécifier la plage" C'est OK si vous spécifiez. Vous trouverez ci-dessous l'exemple de code qui spécifie «un entier supérieur ou égal à 2» comme plage.

Exemple de vérification d'argument3.py


class range_check(object):
    def __init__(self, low_limit=None, high_limit=None, vtype="integer"):
        self.min = low_limit
        self.max = high_limit
        self.type = vtype

    def __contains__(self, val):
        ret = True
        if self.min is not None:
            ret = ret and (val >= self.min)
        if self.max is not None:
            ret = ret and (val <= self.max)
        return ret

    def __iter__(self):
        low = self.min
        if low is None:
            low = "-inf"
        high = self.max
        if high is None:
            high = "+inf"
        L1 = self.type
        L2 = " {} <= x <= {}".format(low, high)
        return iter((L1, L2))

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='LightsOut Solver')
    parser.add_argument('-s', type=int, choices=range_check(low_limit=2), help='LightsOut Size')

En outre, comment décrire l'exemple de projet généré à l'aide de ce code. https://github.com/LyricalMaestro/lightsout-solver-python

Résumé

Si vous utilisez pleinement la méthode de vérification, vous pouvez utiliser argparse pour effectuer une vérification de validation très flexible. Utilisez-le pour créer d'excellents scripts.

Les références

Documentation officielle Python Argparse https://docs.python.jp/3/library/argparse.html

Analyseur d'options que Pythonista connaît http://qiita.com/petitviolet/items/aad73a24f41315f78ee4

Recommended Posts

Comment spécifier un nombre infini de tolérances dans le contrôle de validation d'argument numérique d'argparse
Comment obtenir le nombre de chiffres en Python
Comment trouver le nombre optimal de clusters pour les k-moyennes
Comment connaître la structure interne d'un objet en Python
Comment vérifier la taille de la mémoire d'une variable en Python
[TensorFlow 2] Comment vérifier le contenu de Tensor en mode graphique
Comment vérifier la version de Django
[LPIC 101] Comment spécifier le numéro de partition de disque dans le fichier de configuration GRUB
Comment mentionner un groupe d'utilisateurs avec une notification de mou, comment vérifier l'ID d'un groupe d'utilisateurs
Comment compter le nombre d'éléments dans Django et sortir dans le modèle
Comment connaître le numéro de port du service xinetd
[Golang] Spécifiez un tableau pour la valeur de la carte
[Python] Résumé de la façon de spécifier la couleur de la figure
[Selenium] Comment spécifier le chemin relatif de chromedriver?
Comment identifier l'élément avec le plus petit nombre de caractères dans une liste Python?
Comment vérifier en Python si l'un des éléments d'une liste est dans une autre liste
Comment compter le nombre d'occurrences de chaque élément de la liste en Python avec poids
[python] Comment vérifier si la clé existe dans le dictionnaire
[Pour les débutants] Je souhaite expliquer le nombre d’apprentissage d’une manière facile à comprendre.
Comment manipuler le DOM dans iframe avec Selenium
Comment vérifier si le contenu du dictionnaire est le même en Python par valeur de hachage
Comment vérifier si une valeur existe dans un type d'énumération
Comment calculer la somme ou la moyenne des données csv de séries chronologiques en un instant
Comment augmenter le nombre d'images de jeux de données d'apprentissage automatique
Comment obtenir un aperçu de vos données dans Pandas
Voyons comment compter le nombre d'éléments dans un tableau dans certains langages [Go, JavaScript, PHP, Python, Ruby, Swift]
Comment éliminer le "Les balises doivent être un tableau de hachages." Erreur dans l'API qiita
Comment émettre intentionnellement une erreur dans le shell pendant les tests
Comment déterminer l'existence d'un élément sélénium en Python
Comment implémenter du code Java en arrière-plan de Red Hat (Linux ONE)
[Note] Éléments à vérifier lorsqu'une boucle infinie se produit dans pyenv
Comment obtenir les coordonnées de sommet d'une entité dans ArcPy
La première intelligence artificielle. Comment vérifier la version de Tensorflow installée.
[Note du débutant] Comment spécifier le chemin de lecture de la bibliothèque en Python
[Question] Dans la régression de forêt aléatoire de sk-learn, une erreur se produit lorsque le nombre de parallèles est défini sur -1.
Vérifiez le nombre de nombres premiers inférieur ou égal à n
[Python] Comment spécifier la position d'affichage de la fenêtre et la taille de matplotlib
Comment vérifier le GAE local à partir du navigateur iPhone dans le même LAN
Comment connaître le nombre de processeurs sans utiliser la commande sar
Comment spécifier un fichier .ui dans la boîte de dialogue / interface graphique du widget dans PySide
[Python] Comment mettre n'importe quel nombre d'entrées standard dans la liste
Vérifions la chaîne d'octets en mémoire du nombre flottant flottant en Python
Comment comparer si le contenu des objets dans scipy.sparse.csr_matrix est le même
Comment mettre un numéro de ligne au début d'un fichier CSV
Je souhaite laisser une commande arbitraire dans l'historique des commandes de Shell
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
Comment lire une vidéo tout en regardant le nombre d'images (Mac)
Un exemple de réponse à la question de référence de la session d'étude. Avec python.
Vérifiez le comportement du destroyer en Python
L'histoire d'une erreur dans PyOCR
Partie 1 J'ai écrit un exemple de la réponse au problème de référence de l'écriture hors ligne en temps réel en Python
Comment vérifier la version d'opencv avec python
Comment enregistrer les informations de point caractéristique de l'image dans un fichier et l'utiliser pour la mise en correspondance
Le nombre est-il équivalent à un entier?
Comment spécifier une cible non vérifiée dans Flake8
Comment passer le résultat de l'exécution d'une commande shell dans une liste en Python
traitement (python) Diagramme les coordonnées de la liste Spécifiez le nombre de fois dans draw ()
Comment identifier de manière unique la source d'accès dans la vue de classe générique Django
Définir la limite supérieure du nombre de répétitions de fonctions récursives en Python