Jump to content
Korean Random

Try Catch для всех хуков


Recommended Posts

Подскажите пожалуйста, есть ли в танковом питоне какие нибудь причины не оборачивать в try catch все свои хуки? Чтоб на случай любого исключения внутри мода, функционал игры не был задет 

Я посмотрел по существующим модам, почему то никто так не делает, а потом у пользователей танки крашатся/не логинятся/не стреляют

Link to comment
Short link
Share on other sites

14 часов назад, SoprachevAK сказал:

Подскажите пожалуйста, есть ли в танковом питоне какие нибудь причины не оборачивать в try catch все свои хуки? Чтоб на случай любого исключения внутри мода, функционал игры не был задет 

Я посмотрел по существующим модам, почему то никто так не делает, а потом у пользователей танки крашатся/не логинятся/не стреляют

 

Всё правильно. Танки не должны работать, если мод с ошибкой. Это единственный способ заставить юзвера удалить косячный мод. Никаких других способов это сделать не существует. А если юзверы не будут удалять косячные моды, то наступит Ад для разработчиков модов.

 

14 часов назад, SoprachevAK сказал:

try catch

 

try except else finally

Edited by StranikS_Scan
Link to comment
Short link
Share on other sites

5 часов назад, StranikS_Scan сказал:

Танки не должны работать, если мод с ошибкой

Ну в этом определённо есть смысл, но я не согласен

Баги могут быть редкими и случаться при рандомных условиях. Найти какой именно мод упал, не обладая скиллом изучения python.log крайне тяжело. Уж лучше не ломать игру и писать нотификейшен, что мол мод такой то крашнулся

Я себе в итоге обернул всё таки обработчики хуков. Но я ещё графану прикрутил, есть вот красивые логи от мода с трейсами. Исключений пока не было image.thumb.png.4770eae3c911f4bca412955e46ab10ec.png

Link to comment
Short link
Share on other sites

@SoprachevAK, сравнивал производительность с обработкой и без неё? Если мод небольшой, то это может быть незаметно. Но если большой, могут возникнуть неприятные сюрпризы))

Link to comment
Short link
Share on other sites

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 могу ещё посмотреть трейс логов моего мода этого игрокаimage.thumb.png.46934b7d77c0adf210e640ce2231b77c.png
Причём данное пойманное исключение случается в момент выстрела (то есть без обработчика, у игрока бы не выстрелил танк), и при этом встречается очень редко, менее 1% выстрелов 

  • Upvote 1
Link to comment
Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...