16. Дополнение

16.1. Интерактивный режим

16.1.1. Обработка ошибок

Когда происходит ошибка, интерпретатор выводит сообщение о ней и трассировку стека. В интерактивном режиме он затем возвращается к первичному приглашению; когда ввод поступает из файла, он выходит с ненулевым выходным статусом после печати трассировки стека. (Исключения, обработанные разделом except (docs.python.org/3/reference/compound_stmts.html#except)  оператора try (docs.python.org/3/reference/compound_stmts.html#try), не являются ошибками в этом случае.) Некоторые ошибки безусловно фатальны и являются причиной ненулевого выхода; это применяется для внутренних несоответствий и ряда случаев нехватки памяти. Все сообщения об ошибках записываются в стандартный поток ошибок; в обычный вывод выполненных команд записывается стандартный вывод.

Ввод прерывающего символа (обычно Control-C или Delete) в первичном или вторичном приглашении отменяет ввод и возвращает к первичному приглашению. [1] Ввод прерывания в то время как команда выполняется возбуждает исключение KeyboardInterrupt (docs.python.org/3/library/exceptions.html#KeyboardInterrupt), которое может быть обработано оператором try.

16.1.2. Исполняемые скрипты Python

На BSD-подобных Unix-системах скрипты Python можно сделать сразу выполняемыми подобно shell-скриптам, введя строку

#!/usr/bin/env python3.5

(предполагая, что интерпретатор есть на PATH пользователя) в начале скрипта и задав файлу исполняемый режим. #! должны быть первыми двумя символами файла. На некоторых платформах эта первая строка должна заканчиваться окончанием строки в Unix-стиле ('\n'), не окончанием строки Windows ('\r\n'). Заметьте, что символ хэша, '#', используется для обозначения начала комментария в Python.

Скрипту может быть передан исполняемый режим, или разрешения, с помощью команды chmod.

$ chmod +x myscript.py

В системах Windows нет понятия "исполняемый режим". Установщик Python автоматически ассоциирует файлы .py с python.exe, так что двойной клик на Python-файле запустит его как скрипт. Расширение может быть .pyw, в этом случае окно консоли, которое обычно появляется, подавляется.

16.1.3. Интерактивный загрузочный файл

Когда вы используете Python интерактивно, часто удобно иметь некоторые стандартные команды, выполняемые каждый раз при запуске интерпретатора. Вы можете сделать это, связав переменную окружения PYTHONSTARTUP (docs.python.org/3/using/cmdline.html#envvar-PYTHONSTARTUP) с именем файла, содержащем загрузочные команды. Это похоже на возможности .profile оболочек Unix.

Этот файл читается только в интерактивных сессиях, не когда Python читает команды из скрипта и не когда /dev/tty задан как явный источник команд (который иначе ведет себя как интерактивная сессия). Он выполняется в том же пространстве имен, котором выполняются интерактивные команды, так что объекты, которые он определяет или импортирует, могут быть использованы без квалификации в интерактивном сеансе. Вы также можете изменить в этом файле приглашения sys.ps1 и sys.ps2.

Если вы хотите прочитать дополнительный загрузочный файл из текущей директории, то можете запрограммировать это в глобальном загрузочном файле, используя код наподобие if os.path.isfile('.pythonrc.py'): exec(open('.pythonrc.py').read()). Если вы хотите использовать загрузочный файл в скрипте, то должны сделать это явно в скрипте:

import os
filename = os.environ.get('PYTHONSTARTUP')
if filename and os.path.isfile(filename):
    with open(filename) as fobj:
        startup_file = fobj.read()
    exec(startup_file)

16.1.4. Настройка модулей

Python предоставляет два хука, чтобы позволить вам настроить это: sitecustomize и usercustomize. Чтобы увидеть, как это работает, вам сначала надо найти местонахождение вашей пользовательской директории site-пакетов. Запустите Python и выполните этот код:

>>> import site
>>> site.getusersitepackages()
'/home/user/.local/lib/python3.5/site-packages'

Теперь вы можете создать файл под именем usercustomize.py в той директории и положить в нее что-нибудь, что вы хотите. Оно будет влиять на каждый вызов Python, если только он не запущен с опцией -s, чтобы отключить автоматический импорт.

sitecustomize работает похожим образом, но обычно создается администратором компьютера в глобальной директории site-пакетов и импортируется перед usercustomize. См. документацию по модулю site (docs.python.org/3/library/site.html#module-site) для более полной информации.

Примечания

[1] Проблема с пакетом GNU Readline может помешать этому.

Создано