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

(предполагается, что интерпретатор находится в 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.

Этот файл исполняется только в интерактивных сессиях, а не при исполнении других файлов или при использовании /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`и :index:`usercustomize. Чтобы увидеть, как это работает, сначала нужно узнать расположение пользовательского каталога site-package. Запустите Python и выполните код:

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

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

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

Примечания