Comments 15
Что-то у меня после прочтения статьи когнитивный диссонанс возникает (в смысле, не туда вы копаете):
— с одной стороны вы говорите, что в exception-ах Питона сила и могучесть
— с другой стороны — блин, они требуют столько кода/усилий, что приходится писать врапперы, чтобы сделать вид, что эксепшенов какбе нету. А врапперы сами по себе — ад и израИль, для каждой функции их писать.
Я, конечно, никогда не пробовал писать на python или на других похожих скрипт-web-языках, типа php, но может вам non-exceptional языки больше подойдут? Ну там си, все дела — там, говорят, исключений нет, только сигналы.
— с одной стороны вы говорите, что в exception-ах Питона сила и могучесть
— с другой стороны — блин, они требуют столько кода/усилий, что приходится писать врапперы, чтобы сделать вид, что эксепшенов какбе нету. А врапперы сами по себе — ад и израИль, для каждой функции их писать.
Я, конечно, никогда не пробовал писать на python или на других похожих скрипт-web-языках, типа php, но может вам non-exceptional языки больше подойдут? Ну там си, все дела — там, говорят, исключений нет, только сигналы.
Код на питоне со съеденными отступами — это ад :)
#!/usr/bin/python import os, shutil, safe for m in (os.listdir, os.chown, os.chmod, shutil.copy, shutil.move, os.makedirs, os.mkdir): m = safe.wrap(m)
Мне кажется или этот код ничего не делает?
Странно, минусов много — комментариев мало…
Этот код оборачивает функции из тупла в safe.wrap.
Да… А результат?
m — локальное имя в цикле. Сам os.listdir не изменится.
Иля я чего-то глобально не понимаю в работе ссылок в питоне?
m — локальное имя в цикле. Сам os.listdir не изменится.
Иля я чего-то глобально не понимаю в работе ссылок в питоне?
Да, действительно, тоже локальное имя. Убрал пока что. У вас есть вариант, который бы работал?
Исправьте форматирование кода, пробелы скушались
тег
тег
<pre>вам поможет
try: ... except: ...
плюсанул за старания, но
что это за ужасть?
вообще-то исключения надо так обрабатывать
прошу обратить внимание, что тут e это и есть Ваш sys.exc_info()[1].args
И потом, зачем
когда есть
???
Кроме того, мне кажется что проблема немного надумана, а решение чересчур усложнено. Мне кажется разумным принцип «let it crash» хотя он и звучит обычно в контексте Erlang'а. Ну то есть понятно, что пользовательские сообщения об ошибках должны быть user-friendly, но всех эксепшинов все равно не предусмотришь )
что это за ужасть?
sys.exc_info()[1].args
вообще-то исключения надо так обрабатывать
>>> def tst():
try:
raise IOError('io') if random.randint(0, 1) else OSError('os')
except (IOError, OSError), e:
print e.message
else:
print 'Unknown exception'
>>> tst()
io
>>> tst()
os
прошу обратить внимание, что тут e это и есть Ваш sys.exc_info()[1].args
И потом, зачем
''.join(f)
когда есть
f.read()
???
Кроме того, мне кажется что проблема немного надумана, а решение чересчур усложнено. Мне кажется разумным принцип «let it crash» хотя он и звучит обычно в контексте Erlang'а. Ну то есть понятно, что пользовательские сообщения об ошибках должны быть user-friendly, но всех эксепшинов все равно не предусмотришь )
За read спасибо. По поводу let it crash — речь не о том, чтобы перехватить всё, а чтобы перехватить типовое, и без копипастов.
И вы, наверное, имеете в виду except (IOError, OSError) as e?
И вы, наверное, имеете в виду except (IOError, OSError) as e?
Sign up to leave a comment.
Ловля исключений с минимумом усилий