Все разделы
Выбрать школу

Школа. Увлечения. Большое будущее.

PROSCHOOLS · ОБРАЗОВАНИЕ РЯДОМ

Ваш город

Выберите город, чтобы находить образование и возможности рядом.

Как учитываем городКаталог и кнопки «Выбрать школу» покажут школы выбранного города.Онлайн-курсы, учебник, ГДЗ и задания к экзаменам доступны по всей России.

Популярные города

Будет выбран: Вся Россия

Учебные материалы останутся прежними.

Поиск по сайту

По всему сайтуШколы выбранного города — выше в результатах

С чего начнём?

↑ ↓ — выбрать результат · Enter — открыть · Esc — закрыть

Аргументы командной строки: как программа получает данные при запуске

💻 Информатика · 9 класс

Программу можно запускать с параметрами: python3 sum.py 12 30. Разберёмся, как Python получает эти параметры через sys.argv, почему они всегда строки и как безопасно превращать их в числа.

Программный код на экране
Программный код на экранеMartin Vorel · Wikimedia Commons · CC BY-SA 4.0

Откуда берутся аргументы

При запуске из терминала слова, набранные после имени файла, попадают в список sys.argv. По официальной документации, элемент с индексом 0 — это имя самого скрипта, а пользовательские аргументы идут дальше: sys.argv[1], sys.argv[2] и так далее. Важнейшее правило: все аргументы имеют тип str. Даже команда python3 table.py 7 передаёт не число 7, а строку '7'.

Пример 1. Сумма чисел

Программа sum.py складывает все переданные ей целые числа. Некорректные значения она пропускает и сообщает об этом в поток ошибок sys.stderr.

import sys

def sum_numbers(args):
    total = 0
    for text in args:
        try:
            total += int(text)
        except ValueError:
            print(f'Пропущено: это не целое число -> {text}', file=sys.stderr)
    return total

print(sum_numbers(sys.argv[1:]))

Запуск python3 sum.py 12 30 выведет 42. Запуск python3 sum.py 7 abc 3,5 8 выведет 15, а в стандартный поток ошибок stderr попадут две строки про 'abc' и '3,5'. Обратите внимание: ловится только конкретное исключение ValueError — так рекомендует официальный учебник, чтобы не скрывать неожиданные ошибки.

Пример 2. Строка таблицы умножения

Программа table.py требует ровно один аргумент — число от 1 до 9, — проверяет его и либо печатает строку таблицы умножения, либо завершается с сообщением.

import sys

def multiplication_row(args):
    if len(args) != 1:
        sys.exit('Укажите ровно одно число, например: python3 table.py 7')
    try:
        number = int(args[0])
    except ValueError:
        sys.exit(f'Это не целое число: {args[0]}')
    if number < 1 or number > 9:
        sys.exit('Число должно быть от 1 до 9')
    return ' '.join(f'{number} * {i} = {number * i}' for i in range(1, 10))

print(multiplication_row(sys.argv[1:]))

Запуск python3 table.py 7 выведет «7 * 1 = 7 7 * 2 = 14 … 7 * 9 = 63». Здесь три проверки подряд: сначала количество аргументов, затем преобразование типа, затем допустимый диапазон. Такой порядок делает сообщения об ошибках понятными.

Аргумент с пробелом

В обычной командной оболочке запись python3 hello.py "Анна Мария" передаёт программе одно имя с пробелом. Оболочка использует кавычки для группировки и не включает их в само имя. Конкретные правила экранирования зависят от оболочки. Данные input читаются уже после запуска, а sys.argv формируется при старте программы.

Типичные ошибки

  1. Забыть, что аргументы — строки: print(sys.argv[1] + 1) выбросит TypeError, нужен int() или float().
  2. Обратиться к sys.argv[1], когда аргументов не передали: возникнет IndexError. Проверяйте len(sys.argv) заранее.
  3. Писать except без конкретного типа: перехват всего подряд маскирует настоящие ошибки программы.

Проверь себя

  1. Пользователь запустил python3 game.py 3 4. Что вернёт len(sys.argv)? Ответ: 3 — имя скрипта плюс два аргумента.
  2. Что выведет print(sys.argv[1] + sys.argv[2]) при запуске python3 p.py 12 30? Ответ: 1230 — это сложение строк, а не чисел. Для суммы нужны int().
  3. Как программа должна реагировать на аргумент '3,14'? Ответ: float('3,14') выбросит ValueError; нужно либо сообщить пользователю о формате с точкой, либо заменить запятую точкой до преобразования.
  4. Придумайте команду запуска, при которой table.py выведет «Число должно быть от 1 до 9». Ответ: например python3 table.py 10 или python3 table.py 0 — преобразование успешно, но проверка диапазона не пройдена.

Кратко о главном

Аргументы командной строки доступны через список sys.argv: argv[0] — имя скрипта, остальное — строки. Прежде чем использовать аргумент, проверьте, что он есть, и превратите его в нужный тип, обрабатывая ValueError. Чёткие сообщения об ошибках помогают пользователю запустить программу правильно с первого раза.

Связанные материалы

Источники и материалы