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

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

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

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

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

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

В BSD’ish 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. Чтобы увидеть, как это работает, сначала нужно найти расположение каталога пользовательского сайта-пакетов. Запустите 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 может помешать этому.

Вернуться на верх