SoprachevAK 65 Posted March 7 Подскажите пожалуйста, есть ли в танковом питоне какие нибудь причины не оборачивать в try catch все свои хуки? Чтоб на случай любого исключения внутри мода, функционал игры не был задет Я посмотрел по существующим модам, почему то никто так не делает, а потом у пользователей танки крашатся/не логинятся/не стреляют Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #540403 Posted March 7 (edited) 14 часов назад, SoprachevAK сказал: Подскажите пожалуйста, есть ли в танковом питоне какие нибудь причины не оборачивать в try catch все свои хуки? Чтоб на случай любого исключения внутри мода, функционал игры не был задет Я посмотрел по существующим модам, почему то никто так не делает, а потом у пользователей танки крашатся/не логинятся/не стреляют Всё правильно. Танки не должны работать, если мод с ошибкой. Это единственный способ заставить юзвера удалить косячный мод. Никаких других способов это сделать не существует. А если юзверы не будут удалять косячные моды, то наступит Ад для разработчиков модов. 14 часов назад, SoprachevAK сказал: try catch try except else finally Edited March 7 by StranikS_Scan Quote Share this post Link to post Short link Share on other sites
SoprachevAK 65 #540409 Posted March 8 5 часов назад, StranikS_Scan сказал: Танки не должны работать, если мод с ошибкой Ну в этом определённо есть смысл, но я не согласен Баги могут быть редкими и случаться при рандомных условиях. Найти какой именно мод упал, не обладая скиллом изучения python.log крайне тяжело. Уж лучше не ломать игру и писать нотификейшен, что мол мод такой то крашнулся Я себе в итоге обернул всё таки обработчики хуков. Но я ещё графану прикрутил, есть вот красивые логи от мода с трейсами. Исключений пока не было Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #540412 Posted March 8 4 часа назад, SoprachevAK сказал: Уж лучше не ломать игру и писать нотификейшен, что мол мод такой то крашнулся Ну давай давай Quote Share this post Link to post Short link Share on other sites
yepev 287 #540416 Posted March 8 @SoprachevAK, сравнивал производительность с обработкой и без неё? Если мод небольшой, то это может быть незаметно. Но если большой, могут возникнуть неприятные сюрпризы)) Quote Share this post Link to post Short link Share on other sites
SoprachevAK 65 #540439 Posted March 8 9 часов назад, yepev сказал: @SoprachevAK, сравнивал производительность с обработкой и без неё? Если мод небольшой, то это может быть незаметно. Но если большой, могут возникнуть неприятные сюрпризы)) Так там весь питон танковый в 3+ уровне обработчиков исключений Каждый раз когда танки не крашатся, а пишут исключение в лог, это где то сработал обработчик Я вот использовал стандартный танковый класс Event, чтоб из разных мест мода подписываться на хукнутые события, он сам по себе оборачивает вызов в try except , так ещё и всё равно поднимает исключение наверх в следующий обработчик class Event(list): <...> def __call__(self, *args, **kwargs): for delegate in self[:]: try: delegate(*args, **kwargs) except: LOG_CURRENT_EXCEPTION() raise <...> Себе я заменил его на свой SafeEvent class SafeEvent(Event): __slots__ = () def __init__(self, manager=None): super(SafeEvent, self).__init__(manager) def __call__(self, *args, **kwargs): for delegate in self[:]: try: delegate(*args, **kwargs) except: send_current_exception() LOG_CURRENT_EXCEPTION() Который делает буквально тоже самое, но ещё добавляет исключение в очередь на отправку. Раз в 5 секунд, батчами отправляю их в Grafana Loki Имею теперь замечательный список исключений, причём по session могу ещё посмотреть трейс логов моего мода этого игрока Причём данное пойманное исключение случается в момент выстрела (то есть без обработчика, у игрока бы не выстрелил танк), и при этом встречается очень редко, менее 1% выстрелов 1 Quote Share this post Link to post Short link Share on other sites