zheromo
Фев. 17, 2011 14:17:45
try:
with open('filename', 'r') as f:
for line in f:
print line,
except IOError:
print 'io error!'
o7412369815963
Фев. 17, 2011 15:26:11
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 раза и при ошибке и без
num8er
Фев. 17, 2011 15:43:02
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 бесполезная вещь
o7412369815963
Фев. 17, 2011 16:25:33
num8er
если уж так то получается что finally бесполезная вещь
его можно использовать например для закрытия файлов, или сетевых соединений, освобождения ресурсов - это все равно надо делать даже если где-то внутри возникла ошибка.
indus
Фев. 17, 2011 23:47:34
всем спасибо за участие.
мне известно как работать с try/except/finally
я все же надеялся что функция open(…) позволяет проверять результат по-человечески. без изысканных извращений.
чем больше узнаю Питон, тем более укрепляюсь в мысли, что питонщики таки любители подобных извращение ;) не обижайтесь только. экспешены нужны и полезны, но не всегда и не везде =)
Soteric
Фев. 18, 2011 09:05:30
Как должен открываться файл, чтобы без извращений?
ziro
Фев. 18, 2011 11:34:25
indus
я все же надеялся что функция open(…) позволяет проверять результат по-человечески. без изысканных извращений.
Честно говоря, не вижу извращений. Почему файл не был открыт можно узнать очень просто
try:
f = open(...)
except OSError, e:
if e.errno == errno.ENOENT: print "No such file or directory"
Ну и вообще можно модуль errno посмотреть на предмет всяких кодов ошибок.
indus
Фев. 18, 2011 12:12:44
Soteric
ziro
на системном уровне посредством возращаемой ошибки/некорректного дескриптора. использование исключений для таких целей есть муветон в общем, т.к. это весьма дорогая штука для любой ОС. в любом случае, читая книжки я уже понял, что Питону в общем-то положить на такие “мелочи” =)
ПС. в тоже время не исключаю, что питоновские исключения не являются исключениями в классическом представлении, а есть некий высокоуровневый эрзац-реализация идеи ;)
Андрей Светлов
Фев. 18, 2011 12:38:09
Ээээ. Исключения питона не имеют никакого отношения к исключениям OS (прерываниям, по сути, переключающим контекст процесса в kernel и обратно, с размоткой С стека и прочими неприятностями).
indus
Фев. 18, 2011 14:13:27
Андрей Светлов
вы смешиваете исключения и прерывания.