"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso analisar valores booleanos corretamente no argparse?

Como posso analisar valores booleanos corretamente no argparse?

Publicado em 23/11/2024
Navegar:785

How Can I Parse Boolean Values Correctly in argparse?

Analisando valores booleanos com argparse

No argparse, analisar argumentos booleanos de linha de comando é uma tarefa comum, mas surge uma armadilha comum ao tentar para analisar valores como "--foo True" ou "--foo False" usando o argumento type=bool. Surpreendentemente, mesmo ao usar uma string vazia como argumento (por exemplo, "--foo " "), o valor analisado é avaliado como True.

Para análise booleana correta, argparse oferece duas abordagens recomendadas:

Abordagem canônica:

Use o '--feature' e '--no-feature' sintaxe, suportada nativamente por argparse Em Python 3.9 e superior:

parser.add_argument('--feature', action=argparse.BooleanOptionalAction)

Em versões Python abaixo de 3.9:

parser.add_argument('--feature', action='store_true')
parser.add_argument('--no-feature', dest='feature', action='store_false')
parser.set_defaults(feature=True)

Com esta abordagem, a presença de '--feature' define o valor como True, enquanto '--no-feature' define-o como False. A ausência de qualquer argumento é padronizada como True.

Abordagem opcional (usando conversão de tipo):

Se a sintaxe "--arg " for desejada , funções de conversão de tipo personalizadas podem ser empregadas. Um exemplo é ast.literal_eval:

parser.add_argument("--arg", type=ast.literal_eval)

Alternativamente, uma função definida pelo usuário pode ser criada:

def true_or_false(arg):
    ua = str(arg).upper()
    if 'TRUE'.startswith(ua):
       return True
    elif 'FALSE'.startswith(ua):
       return False
    else:
       raise argparse.ArgumentTypeError('Invalid boolean value')
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3