16. Приложение

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

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

При возникновении ошибки интерпретатор печатает сообщение об ошибке и трассировку стека. В интерактивном режиме он возвращается к начальному приглашению; если выполнение производится из файла, он выходит с ненулевым статусом выхода после печати трассировки стека. (Исключения обрабатываемые предложением except в операторе try не являются ошибками в данном контексте.) Некоторые ошибки являются безусловно фатальными и вызывают выход с ненулевым статусом выхода; это касается внутренних неисправностей и некоторых случаев нехватки памяти. Все сообщения об ошибках пишутся в стандартный поток ошибок; нормальный вывод выполняемых команд записывается в стандартный вывод.

Ввод символа прерывания (обычно Control-C или Delete) при первичном или вторичном приглашении отменяет ввод и возвращается на первичное приглашение. [1] Ввод прерывания во время выполнения команды вызывает KeyboardInterrupt исключение, которое может быть обработано оператором try.

16.1.2. Исполняемые Python сценарии

В системах BSD Unix, Python-скрипты могут выполняться непосредственно, например в виде скриптов оболочки, поставив строку:

#!/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 именем файла, содержащего ваши стартовые команды. Это подобно возможности .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-packages. Запустите Python и выполните код:

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

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

sitecustomize работает таким же образом, но обычно создаётся администратора компьютера в глобальном каталоге site-packages и импортируется перед usercustomize. См. документацию site для получения дополнительной информации.

Сноска

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