Найти - Пользователи
Полная версия: Как проверить дескриптор файла на корректность?
Начало » Python для новичков » Как проверить дескриптор файла на корректность?
1 2 3
indus
f = open(…)

проверить что файл действительно создан/открыт и описатель валиден
zheromo
ну… если что-то пойдет не так то после open сразу возникнет исключение
indus
zheromo
как один из вариантов имеет право быть =)

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

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

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

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

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

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

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

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

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

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

finally гарантированно выполняется в любом случае, была ошибка или нет
мне удобно быть уверенным что я конкретно “сказал” питону что “если выполнил трай то делай файнели”
Soteric
Ваш код просто неправильный, о чем сказал o7412369815963. Если при открытии файла возникнет исключение, то
while 1:
line=f.readline(); // считываем строку
if not line: // если нечего считывать
break; // то облом
print line; // принтуем строку
f.close();
этот код у вас все равно будет выполнен, чего не должно быть.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB