Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 17, 2011 06:54:45

indus
От:
Зарегистрирован: 2011-02-07
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Как проверить дескриптор файла на корректность?

f = open(…)

проверить что файл действительно создан/открыт и описатель валиден



Офлайн

#2 Фев. 17, 2011 07:52:29

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Как проверить дескриптор файла на корректность?

ну… если что-то пойдет не так то после open сразу возникнет исключение



Офлайн

#3 Фев. 17, 2011 08:06:42

indus
От:
Зарегистрирован: 2011-02-07
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Как проверить дескриптор файла на корректность?

zheromo
как один из вариантов имеет право быть =)

а как-нибудь более естественно это можно сделать?



Офлайн

#4 Фев. 17, 2011 09:41:10

num8er
От:
Зарегистрирован: 2011-02-17
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Как проверить дескриптор файла на корректность?

покажу пример

try:
f=open('filename', 'r'); // пытаемся открыть файл
finally:
// если файл удачно открылся то:
while 1:
line=f.readline(); // считываем строку
if not line: // если нечего считывать
break; // то облом
print line; // принтуем строку
f.close(); // закрыли дескриптор



Офлайн

#5 Фев. 17, 2011 10:19:04

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Как проверить дескриптор файла на корректность?

num8er
покажу пример

try:
f=open('filename', 'r'); // пытаемся открыть файл
finally:
// если файл удачно открылся то:
while 1:
line=f.readline(); // считываем строку
if not line: // если нечего считывать
break; // то облом
print line; // принтуем строку
f.close(); // закрыли дескриптор
не верно, finally вызывается при ошибке
нужно все запихать в блок try

Офлайн

#6 Фев. 17, 2011 12:07:12

num8er
От:
Зарегистрирован: 2011-02-17
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Как проверить дескриптор файла на корректность?

o7412369815963
num8er
покажу пример

try:
f=open('filename', 'r'); // пытаемся открыть файл
finally:
// если файл удачно открылся то:
while 1:
line=f.readline(); // считываем строку
if not line: // если нечего считывать
break; // то облом
print line; // принтуем строку
f.close(); // закрыли дескриптор
не верно, finally вызывается при ошибке
нужно все запихать в блок try
для ошибок есть “except:”
а “finally:” при успешном выполнении блока в try

вот книгу читай: http://www.python.ru/files/book-ods.pdf (особенно о блоке try - except - finally)
читай:
http://www.python.org/dev/peps/pep-0341/
http://www.effbot.org/pyref/try.htm

но хотя и так тоже можно, никто не запрешал )))



Отредактировано (Фев. 17, 2011 12:28:20)

Офлайн

#7 Фев. 17, 2011 12:16:46

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Как проверить дескриптор файла на корректность?

finally будет выполнен в любом случае. В этом его смысл - гарантированно выполнить код, независимо от того были ошибки или не было.



Офлайн

#8 Фев. 17, 2011 12:18:59

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Как проверить дескриптор файла на корректность?

Вы все тут не правы, finally гарантированно выполняется в любом случае, была ошибка или нет. Если ошибка (повторно) возникает в except, то finally всё равно сработает, такой вот он.

> а как-нибудь более естественно это можно сделать?
Вам надо с си поработать, естественнее не бывает, там вы защищены от такого глупого изобретения как исключения. Будите естественно результат работы каждой функции проверять естественно.

p.s. Было написано до поста Soteric'а.

..bw



Отредактировано (Фев. 17, 2011 12:19:41)

Офлайн

#9 Фев. 17, 2011 12:32:30

num8er
От:
Зарегистрирован: 2011-02-17
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Как проверить дескриптор файла на корректность?

bw
Вы все тут не правы, finally гарантированно выполняется в любом случае, была ошибка или нет. Если ошибка (повторно) возникает в except, то finally всё равно сработает, такой вот он.

> а как-нибудь более естественно это можно сделать?
Вам надо с си поработать, естественнее не бывает, там вы защищены от такого глупого изобретения как исключения. Будите естественно результат работы каждой функции проверять естественно.

p.s. Было написано до поста Soteric'а.

..bw
вас не знаю. но я люблю конкретику.

finally гарантированно выполняется в любом случае, была ошибка или нет
мне удобно быть уверенным что я конкретно “сказал” питону что “если выполнил трай то делай файнели”



Отредактировано (Фев. 17, 2011 12:37:00)

Офлайн

#10 Фев. 17, 2011 13:35:34

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Как проверить дескриптор файла на корректность?

Ваш код просто неправильный, о чем сказал o7412369815963. Если при открытии файла возникнет исключение, то

while 1:
line=f.readline(); // считываем строку
if not line: // если нечего считывать
break; // то облом
print line; // принтуем строку
f.close();
этот код у вас все равно будет выполнен, чего не должно быть.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version