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
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')
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