Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 17, 2011 14:17:45

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

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

try:
with open('filename', 'r') as f:
for line in f:
print line,
except IOError:
print 'io error!'



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

Офлайн

#2 Фев. 17, 2011 15:26:11

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

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

num8er
для ошибок есть “except:”
а “finally:” при успешном выполнении блока в try

вот книгу читай: http://www.python.ru/files/book-ods.pdf (особенно о блоке try - except - finally)
книги надо почитать тебе, см пример:
try:
print 'try 0/1',
a = 0/1
print 'ok'
finally:
print 'finally 0/1'

try:
print 'try 1/0'
a = 1/0
print 'ok'
finally:
print 'finally 1/0'
результат:
try 0/1 ok
finally 0/1
try 1/0
finally 1/0
Traceback (most recent call last): ....
finally выполнился 2 раза и при ошибке и без

Отредактировано (Фев. 17, 2011 15:26:44)

Офлайн

#3 Фев. 17, 2011 15:43:02

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

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

o7412369815963
num8er
для ошибок есть “except:”
а “finally:” при успешном выполнении блока в try

вот книгу читай: http://www.python.ru/files/book-ods.pdf (особенно о блоке try - except - finally)
книги надо почитать тебе, см пример:
try:
print 'try 0/1',
a = 0/1
print 'ok'
finally:
print 'finally 0/1'

try:
print 'try 1/0'
a = 1/0
print 'ok'
finally:
print 'finally 1/0'
результат:
try 0/1 ok
finally 0/1
try 1/0
finally 1/0
Traceback (most recent call last): ....
finally выполнился 2 раза и при ошибке и без
прошу прошения ))) видимо я не так понял трактовку finally
если уж так то получается что finally бесполезная вещь



Офлайн

#4 Фев. 17, 2011 16:25:33

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

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

num8er
если уж так то получается что finally бесполезная вещь
его можно использовать например для закрытия файлов, или сетевых соединений, освобождения ресурсов - это все равно надо делать даже если где-то внутри возникла ошибка.

Офлайн

#5 Фев. 17, 2011 23:47:34

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

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

всем спасибо за участие.
мне известно как работать с try/except/finally
я все же надеялся что функция open(…) позволяет проверять результат по-человечески. без изысканных извращений.
чем больше узнаю Питон, тем более укрепляюсь в мысли, что питонщики таки любители подобных извращение ;) не обижайтесь только. экспешены нужны и полезны, но не всегда и не везде =)



Офлайн

#6 Фев. 18, 2011 09:05:30

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

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

Как должен открываться файл, чтобы без извращений?



Офлайн

#7 Фев. 18, 2011 11:34:25

ziro
От:
Зарегистрирован: 2009-08-13
Сообщения: 225
Репутация: +  8  -
Профиль   Отправить e-mail  

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

indus
я все же надеялся что функция open(…) позволяет проверять результат по-человечески. без изысканных извращений.
Честно говоря, не вижу извращений. Почему файл не был открыт можно узнать очень просто

    try:
f = open(...)
except OSError, e:
if e.errno == errno.ENOENT: print "No such file or directory"
Ну и вообще можно модуль errno посмотреть на предмет всяких кодов ошибок.



Офлайн

#8 Фев. 18, 2011 12:12:44

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

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

Soteric
ziro

на системном уровне посредством возращаемой ошибки/некорректного дескриптора. использование исключений для таких целей есть муветон в общем, т.к. это весьма дорогая штука для любой ОС. в любом случае, читая книжки я уже понял, что Питону в общем-то положить на такие “мелочи” =)

ПС. в тоже время не исключаю, что питоновские исключения не являются исключениями в классическом представлении, а есть некий высокоуровневый эрзац-реализация идеи ;)



Офлайн

#9 Фев. 18, 2011 12:38:09

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

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

Ээээ. Исключения питона не имеют никакого отношения к исключениям OS (прерываниям, по сути, переключающим контекст процесса в kernel и обратно, с размоткой С стека и прочими неприятностями).



Офлайн

#10 Фев. 18, 2011 14:13:27

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

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

Андрей Светлов
вы смешиваете исключения и прерывания.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version