Создание параметров командной строки Необязательно в Python

110
14

Я использую ArgParse для предоставления параметров командной строки в Python.

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--quality", help="enter some quality limit")
args = parser.parse_args()
print "You gave quality = %s" % str(args.quality)

Я сохранил это как a.py затем a.py следующее:

$ python a.py --quality 10
You gave quality = 10

Я также хочу, чтобы мой код работал, даже если параметр командной строки не указан. Я хочу сделать его необязательным. И если он предоставлен, тогда он принимает определенное значение, которое может быть использовано дальше.

В моем коде есть что-то подобное:

 if int(quality)==10:

Поэтому, если я запускаю без параметра:

 $ python a.py

Я получаю эту ошибку:

Аргумент TypeError: int() должен быть строкой или числом, а не "NoneType"

спросил(а) 2021-01-19T13:07:33+03:00 6 месяцев, 2 недели назад
1
Решение
101

Я думаю, вы хотите:

parser.add_argument("--quality", 
type=int,
default=10,
help="enter some quality limit")

Укажите тип int и укажите требуемое значение по умолчанию. Проблема, с которой вы сталкиваетесь, заключается в том, что вы не дали аргументу значение по умолчанию (через аргумент ключевого слова по default), поэтому, если он не указан в командной строке, по умолчанию используется значение None, которое int (quality) задыхается. Установка type int выше позволяет избежать необходимости делать int().

ответил(а) 2021-01-19T13:07:33+03:00 6 месяцев, 2 недели назад
46

Прямо из справочного документа прочитайте это первым:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int, help="display a square of a given number")
parser.add_argument("-v", "--verbosity", type=int,
help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbosity == 2:
print "the square of {} equals {}".format(args.square, answer)
elif args.verbosity == 1:
print "{}^2 == {}".format(args.square, answer)
else:
print answer

Здесь решение вашего вопроса

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--quality", help="enter some quality limit")
args = parser.parse_args()
if args.quality: #Optional parameter
#act if it was provided
print "You gave quality = %s" % str(args.quality)
else:
#what to do if it wasn't provided
print "You failed to provide a quantity"

ответил(а) 2021-01-19T13:07:33+03:00 6 месяцев, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема