Форум сайта python.su
0
Если внутри функции надо по какому-то условию вывалиться по return() к этому времени открыт коннекторы в файлы и базы, организованы курсоры и пр. надо ли все это в явном виде закрывать (в смысле коннекторы и курсоры)??? Или можно все закрывающее затолкать в finally: и не ломать мозг что и где уже закрыто/открыто???
Офлайн
33
erjeminВот это все где открывается?
коннекторы в файлы и базы, организованы курсоры и пр.
Офлайн
0
Все открывается в функции… В ней же исключения обрабатываются… Но т.к. условий много то или городить лестницу if и в каждой явно обрабатывать весь кусок кода (получится аналог swith case, читабельнее, но более громоздко и куски повторяющегося кода), или разбирать if последоавательно, что сильно оптимизирует код, но придется все отслеживать или наедятся на finally: внутри функции
Кстати, если я что-то повторно закрою не страшно? Что происходит если закрытые коннекты повторно пытаются закрыть???
Офлайн
33
erjeminВообще то зависит от библиотек.
Кстати, если я что-то повторно закрою не страшно? Что происходит если закрытые коннекты повторно пытаются закрыть???
Офлайн
0
Спасибо! НО что-то я подумал и решил вообще все переписать…
И еще, я бывший Си-шник и потому важно: все эти открывания коннектов в базы, формирование курсоров, открытий файлов затратно по ресурсам? А то может запихнуть все по функциям. Например фукнция записи в лог. Кидаешь в нее значение, а она открывает файл-записывает-закрывает. Сейчас я открываю заранее (т.к. думаю это ресурсноемко) и уже в функции (или пере ее вызовом) отслеживаю исключения. Я конечно понимаю что любые исключения жрут ресурс больше чем любой открытый курсор-коннек, но в моем случае исключение один раз… Т.е. я открываю все что мне нужно и уж если все ок, то уже все функции объявляю…
Офлайн
0
О еще вопрос:
Даже если у вас return внутри блока try-except, ваш finally все равно выполнится.
А вот если return внутри finally, то вернется именно это значение - из finally.
Офлайн
33
erjeminДа, конечно. Эти затраты не зависят от языка.
все эти открывания коннектов в базы, формирование курсоров, открытий файлов затратно по ресурсам?
erjeminСработает именно он и только он, даже при наличии return в блоке try.
А если у меня в finally тоже return но какой-то другой (в смысле возвращает что-то свое) то как?
Офлайн