Анимация
JavaScript
|
Главная Библионтека 15.6. traceback - модуль для работы с объектами traceback 209 print stack ([frame [, limit [, file]]]) Отслеживает и выводит путь по стеку от кадра стека frame до корня программы (модуля main ). Если аргумент frame опущен или равен None, считается равным кадру стека блока, из которого функция print stack() была вызвана. Необязательные аргументы limit и file имеют такое же значение, как и в функции print exception() . extract tb( traceback [, limit ]) Возвращает информацию о пути, содержащуюся в объекте traceback, в виде списка (каждый элемент представляет кадр стека, соответствующий очередному вложенному объекту traceback) кортежей ( filename, line number, function name, text ) , где filename - имя файла, line number - номер строки в файле, function name - имя функции и text - строка исходного текста с обрезанными символами пропуска (whitespace) в начале и конце или None. Необязательный аргумент limit имеет такое же значение, как и в функции print exception() . extract stack( [frame [, limit ]]) Возвращает информацию, описывающую путь от указанного или текущего кадра стека до корня программы. Возвращаемое значение имеет такой же формат, как и значение, возвращаемое функцией extract tb() . Необязательные аргументы frame и limit имеют такое же значение, как и в функции print stack() . format list( list ) Возвращает список готовых к выводу (например, методом writelines файлового объекта) строк, полученных форматированием списка кортежей list - результата функции extract tb() или extract stack() . Каждая строка возвращаемого списка соответствует элементу с таким же индексом аргумента. Каждая строка заканчивается символом перехода на новую строку и может содержать несколько символов перехода на новую строку, если последний элемент соответствующего кортежа (строка исходного текста) не равен None. format exception only( type, value) Возвращает список строк, подготовленный для вывода (например, методом writelines файлового объекта) информации об исключении. Каждая строка в возвращаемом списке заканчивается символом перехода на новую строку. type и value должны быть объектами, представляющими тип и значение исключения. Обычно список содержит только одну строку. Однако для исключений SyntaxError список будет состоять из нескольких строк, содержащих, в том числе, фрагмент исходного текста программы и информацию о месте обнаружения синтаксической ошибки. Строка, описывающая исключение, всегда идет в списке последней. format exception( type, value, traceback [, limit ]) Возвращает список строк, подготовленный для вывода (например, методом writelines файлового объекта) информации об исключении и информации, представляемой объектом traceback. Аргументы имеют такое же значение, как и соответствующие аргументы функции print exception() . Каждая строка в воз- вращаемом списке заканчивается символом перехода на новую строку и может содержать несколько символов перехода на новую строку. Вывод этих строк (например, с помощью метода writelines файлового объекта) дает такой же результат, как и вызов функции print exception() . format tb( traceback [, limit]) Вызов этой функции эквивалентен вызову format list(extract tb( traceback, limit )) . format stack( frame [, limit]) Вызов этой функции эквивалентен вызову format list(extract stack( frame, limit )) . tb lineno( traceback) Возвращает номер текущей строки, представленной объектом traceback. Обычно возвращаемое значение равно traceback.tb lineno. Однако при включенной оптимизации атрибут tb lineno не обновляется корректно, в то время как функция tb lineno() всегда возвращает правильное значение. Следующий пример реализует простейший интерактивный интерпретатор, аналогичный стандартному: import sys, traceback def run user code(envdir): source = raw input("»> ") try: exec source in envdir except: print "Исключение в пользовательском коде:" print -*60 traceback.print exc(file=sys.stdout) print -*60 envdir = {} while 1: run user code(envdir) Для создания более сложных интерактивных интерпретаторов лучше воспользоваться классами, определенными в модуле code. Важное замечание: модуль traceback для считывания строк исходного кода использует модуль linecache, который держит в памяти содержимое всех файлов, к которым когда-либо были обращения. В долгоживущих программах, позволяющим пользователю каким-либо образом (например, путем ввода интерактивных команд) выполнять код из различных файлов, это может привести к нежелательному использованию большого количества памяти. Чтобы этого избежать, следует периодически очищать кэш с помощью функции linecache.clearcacheO . 15.7. imp - доступ к операциям, производимым инструкцией ... 211 15.7 imp - доступ к операциям, производимым инструкцией import Этот модуль предоставляет интерфейс к операциям, используемым для реализации инструкции import. Он определяет следующие функции: get magic() Возвращает магическое строковое значение, используемое в самом начале байт-компилированных файлов кода для того, чтобы их можно было распознать. Это значение может быть разным для разных версий интерпретатора. get suffixes() Возвращает список кортежей, каждый из которых имеет вид ( suffix, mode, type) и описывает определенный тип модулей: suffix - строка, добавляемая к имени модуля для образования имени файла; mode - строка режима, которую необходимо передать встроенной функции open() для того, чтобы открыть файл на чтение (r для текстовых файлов и rb для двоичных); type - тип файла, может иметь значение py source, py compiled или c extension (см. ниже). find module( name [, path]) Пытается найти модуль с именем name в путях path. Производится поиск файла с любым из суффиксов, возвращаемых функцией get suffixes(), по очереди в каждом из каталогов в списке path. Неверные имена каталогов молча игнорируются, но все элементы списка должны быть строками. Если аргумент path опущен или равен None, поиск производится сначала среди встроенных (c BUILTIn) и вложенных (py FROZEn) модулей, среди ресурсов (py RESOURCe) в операционных системах Macintosh или файлов, указанных в системном реестре Windows, затем в каталогах, перечисленных в sys.path. В случае успеха функция возвращает кортеж вида ( file, pathname, description) , где file - файл, открытый для чтения, с указателем, установленным на начало, pathname - полное имя файла модуля и description - один из кортежей в списке get suffixes(), описывающий тип модуля. Если модуль не находится в файле, то file равен None, pathname - имени модуля, а description содержит пустые строки (суффикс и режим). Если модуль не найден, генерируется исключение ImportError. Другие исключения указывают на проблемы с аргументами или окружением. Эта функция не обрабатывает иерархические имена модулей. Для того, чтобы найти P .M, то есть модуль M пакета P, найдите и загрузите модуль P, затем используйте функцию find module() с аргументом path, равным P. path . load module( name, file, filename, description) Загружает модуль. Если модуль до этого уже был импортирован, вызов функции load module() эквивалентен вызову встроенной функции reload() . Аргумент name является полным именем модуля (то есть включает имя пакета). Аргументы 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 [ 64 ] 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |