CGI: передача содержимого скрипта get_file_form.py



#!c:/ . . . Python35-32/python.exe

print("Content-Type: text/html\n")

import cgi, cgitb, my_cgi

file=cgi.parse()["filename"][0]

try :

f= open (file, encoding= "utf-8" )

print (my_cgi.H, "CGI: передача содержимого скрипта " ,file)

for el in f: my_cgi.D,el)

except FileNotFoundError : print (my_cgi.D, "Файл " , file, " не найден" ).

Оглавление

Использование модуля os для работы с файловой системой

Модуль os имеет ряд методов, которые можно использовать для работы с файлами:

· rename(имя_файла, новое_имя_файла) – переименовует файл:

>>> f= open ( 'text2.txt' )
>>> f.readlines()
'First line\nSecond line\nThrid line\n'
>>> f= open ( 'text3.txt' )
FileNotFoundError: [Errno 2] No such file or directory: 'text3.txt' :

Фрагмент кода показывает, что файл text2.txt содержит данные, а файла text3.txt нет. Теперь с помощью метода rename() модуля os переименуем файл text2.txt в файл text3.txt

>>> f.close()
>>> import os
>>> os.rename( 'text2.txt' , 'text3.txt' )

и попытается открыть файлы text2.txt и text3.txt и прочитать из них данные:

>>> f= open ( 'text2.txt' )
FileNotFoundError: [Errno 2] No such file or directory: 'text2.txt'
>>> open ( 'text3.txt' )
>>> f.readlines()
'First line\nSecond line\nThrid line\n'
>>> f.close()

Результаты подтверждают правильность работы функции rename() по переименованию файлов;

· remove( имя _ файла ) – удаляет указанный файл :

>>> os.remove( 'text3.txt' )
>>> open ( 'text3.txt' )
FileNotFoundError: [Errno 2] No such file or directory: 'text3.txt' ;

· getcwd() – возвращает путь к текущему каталогу, например:

>>> os.getcwd()
'F:\\DISK_D\\PYTHON\\LAB' ;

· chdir(путь) – сделать каталог, указанный аргументом, текущим каталогом, например:

>>> os.chdir('F:\\DISK_D\\PYTHON')
>>> os.getcwd()
'F:\\DISK_D\\PYTHON' ;

· listdir(путь) – возвращает в виде списка содержимое указанного каталога (если путь не задан – текущего):

>>> os.listdir()
['LAB', 'LAB.rar', 'python', 'Python_book', 'SAMPLES', 'THEORY', 'ТЕОРИЯ'] ;

· mkdir(имя_нового_каталога) – создает новый каталог:

>>> os.chdir('TEMP')
>>> os.listdir()
['LAB', 'LAB.rar', 'python', 'Python_book', 'SAMPLES', 'TEMP', 'THEORY', 'ТЕОРИЯ'] ;

· rmdir(путь) – удаляет указанный каталог:

>>> os.chdir('TEMP')
>>> os.listdir()
['LAB', 'LAB.rar', 'python', 'Python_book', 'SAMPLES', 'THEORY', 'ТЕОРИЯ'] ;

Оглавление

Использование модуля pickle для сериализации и консервации объектов

Файлы в языке Python могут содержать или строки (текстовые файлы), или последовательности байтов (двоичные файлы). Чтобы сохранить в файле данные других типов, необходимо преобразовать их в строки (класс str) или в последовательности байтов (классы bytes и bytesarray). Это называется сериализацией объектов.
Модуль pickle содержит методы, позволяющие выполнить преобразование объектов разных типов и запись их в файлы:

· dumps(объект) – преобразует объект в последовательность байтов типа bytes:

>>> a_dict={ 'name' : 'Tom' , 'sport' : 'tennis' }
>>> import pickle
>>> s_dump=pickle.dumps(a_dict)
>>> s_dump
b'\x80\x03}q\x00(X\x05\x00\x00\x00sportq\x01X\x06\x00\x00\x00tennisq\x02X\x04\x00\x00\x00name q\x03X\x03\x00\x00\x00Tomq\x04u.'

· loads(объект bytes) – выполняет обратную операцию – возвращает исходную форму сериализованного методом dumps() объекта:

>>> b_dict=pickle.loads(s_dump)
>>> b_dict
{'sport': 'tennis', 'name': 'Tom'}

· dump(объект, ссылка_на_файл) – преобразует объект в последовательность байтов и в таком виде записывает в двоичный файл, т.е. выполняет операции сериализации и консервации объекта:

>>> f2= open ( 'dump1.dat' , 'w+b' )
>>> pickle.dump(a_dict,f2)
>>> f2.seek(0)
0

· load(ссылка_на_файл) – читает из файла данные, преобразует их в исходную форму и возращает:

>>> c_dict=pickle.load(f2)
>>> c_dict
{'sport': 'tennis', 'name': 'Tom'}

Методы консервации pickle.dump() и деконсервации pickle.load() данных были использованы для сохранения и чтения набора тестов и словаря данных пользоваетеля при его тестировании (см. подразделы 2.2.2 и 2.2.3 лаб. раб. №10).

Оглавление

Обработка исключений

В программах на языке Python могут возникнуть ошибки двух типов:

· синтаксические ошибки, которые возникают при грамматическом разборе кода (парсинге от англ. parsing);

· исключительные ситуации или просто иключения, которые возникают при работе кода.

Если синтаксические ошибки могут обрабатываться только интерпретатором, то исключения могут быть обработаны также пользователем.

Оглавление

Типы исключений

Python имеет следующие встроенные типы исключений:

· BaseException – базовый класс для всех встроенных исключений;

· Exception – все встроенные исключения, а также все пользовательские исключения должны наследоваться из этого класса;

· SystemExit – исключение, порождаемое функцией sys.exit при выходе из программы;

· SystemExit – исключение, порождаемое функцией sys.exit при выходе из программы.

· KeyboardInterrupt – возникает при прерывании программы пользователем (обычно комбинацией клавиш Ctrl+C;

· GeneratorExit – возникает при вызове метода close объекта generator;

· StopIteration – возникает встроенной функцией next, если в итераторе больше нет элементов;

· ArithmeticError – арифметическая ошибка;

· FloatingPointError – возникает при неудачном выполнении операции с плавающей запятой;

· OverflowError – возникает, когда результат арифметической операции слишком велик для представления. Не появляется при обычной работе с числами (так как Python поддерживает длинные числа), но может возникать в некоторых других случаях;

· ZeroDivisionError – деление на ноль;

· AssertionError – выражение в функции assert ложно;

· AttributeError – объект не имеет данного атрибута (значения или метода)

· BufferError – операция, связанная с буфером, не может быть выполнена;

· EOFError – функция input() наткнулась на конец файла и не смогла при этом ничего прочитать;

· ImportError – не удалось импортирование модуля или его атрибута;

· LookupError – некорректный индекс или ключ;

· IndexError – индекс не входит в диапазон элементов;

· KeyError – несуществующий ключ (в словаре, множестве или другом объекте);

· MemoryError – недостаточно памяти;

· NameError – не найдено переменной с таким именем;

· UnboundLocalError – сделана ссылка на локальную переменную в функции, но переменная не определена ранее;

· OSError – ошибка, связанная с системой;

· io.BlockingIOError – возникает, когда используется блоковая операция ввода/вывода при неблокированном потоковом вводе/выводе;

· ChildProcessError – неудача при операции с дочерним процессом;

· ConnectionError – базовый класс для исключений, связанных с подключениями;

· BrokenPipeError – возникает, когда запись в контейнер невозможна;

· ConnectionAbortedError – возникает, когда подключение прекращино устройством;

· ConnectionRefusedError – возникает, когда попытка подключиться отвергнута устройством;

· ConnectionResetError – возникает, когда попытка подключиться сброшена устройством;

· FileExistsError – попытка создания файла или директории, которые уже существуют;

· InterruptedError – системный вызов прерван входящим сигналом;

· IsADirectoryError – ожидался файл, а это директория;

· NotADirectoryError – ожидалась директория, а это файл;

· PermissionError – не достаточно прав доступа;

· ProcessLookupError – указанного процесса не существует;

· TimeoutError – возникает, когда заканчивается интервал времени работы системной функции;

· ReferenceError – попытка доступа к атрибуту со слабой ссылкой;

· RuntimeError – возникает, когда исключение не попадает ни под одну из других категорий;

· SyntaxError – синтаксическая ошибка;

· – неправильные отступы;

· TabError – смешивание в отступах табуляции и пробелов;

· SystemError – внутренняя ошибка;

· ValueError – функция получает аргумент правильного типа, но некорректного значения;

· UnicodeError – ошибка, связанная с кодированием / раскодированием Unicode в строках;

· UnicodeEncodeError – исключение, связанное с кодированием Unicode;

· UnicodeDecodeError – исключение, связанное с декодированием Unicode;

· UnicodeTranslateError – исключение, связанное с переводом Unicode;

· Warning – предупреждение.

Оглавление

Использование оператора try

Для обработки исключений используется оператор try, который в общем случае имеет следующую структуру:

try:
<блок>
except <тип исключения>:
<блок>
[else:
<блок>]
[finally:
<блок>]

Отдельные части (секции) оператора try имеют следующее назначение:

· в секции try указывается фрагмент кода, подлежащий проверке на правильность выполнения. Если во время выполнения возникает исключение, выполнение передается секции except и оставшаяся часть кода секции try не выполняется. Если исключение не возникает, управление секции except вообще не передается и эта секция не выполняется;

· в секции except задается тип обрабатываемого исключения одним из следующих способов:

§ если тип исключения не указан – будет обрабатываться любое из возникших в секции try исключений;

§ если указан тип одного исключения – будет обрабатываться именно это исключение. Если возникнет любое другое исключение, оно будет передано на обработку вышестоящему оператору try. Если ни один из операторов программы не обрабатывает возникшее исключение, его обработает интерпретатор стандартным образом;

§ если указано в виде кортежа несколько типов исключений – будет обрабатываться любое из них;

· в отличие от секций try и except секция else не является обязательной. Она выполняется тогда, когда в секции try не возникло исключений;

· секция finally, если указана в операторе try, выполняется всегда после завершения работы секции try, независимо от того, произошло исключение, или нет. Используется в случаях, когда нужно выполнить определенные действия всегда, например, при операциях с файлами в любом случае необходимо закрыть файл.

В операторе try может быть указано несколько секций except, что позволяет обрабатывать несколько исключений независимо.
Приведем пример, в котором вводятся числа с клавиатуры и вычисляются их обратные значения. Поскольку при ошибке ввода или по незнанию может быть введено число 0 и возникнуть исключение деления на 0 (ZeroDivisionError), то для обработки этой ситуации используется оператор try:

>>> while True :
try :
c=1/int(input ( 'Введите число ' ))
print('c= ',c)
break
except ZeroDivisionError:
print ( 'Ошибка: деление на 0' )
Введите число 0
Ошибка: деление на 0
Введите число 5
c=0.2

После ввода нуля возникает и обрабатывается исключение ZeroDivisionError, сообщая пользователю об ошибке ввода. При повторном вводе числа на экран выводится его обратное значение – 0.2.
Использование оператора try для обнаружения и обработки исключения FileNotFoundError при открытии файла показано в подразделе 1.3 .

Оглавление


Дата добавления: 2021-11-30; просмотров: 15; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!