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 может помешать этому.