Godot: какой-то блок try finally (или except) для gdscript

Созданный на 30 янв. 2016  ·  13Комментарии  ·  Источник: godotengine/godot

В Python это называется попыткой, за исключением Java, наконец, попытаться поймать. Запустите код внутри блока try, если он не может выполнить вместо этого блок finally. Это может значительно упростить кодирование в gd-скрипте, удалив все сбои. Вам больше не придется беспокоиться о плохом коде. Иногда вам может потребоваться, чтобы 1 код работал с динамическим фрагментом данных, и вам не нужно было создавать дополнительные отказоустойчивые системы на случай, если вы скажете, что данных нет.

ВСЕ ошибки из блока неудачной попытки всегда будут отображаться в окне отладки (автоматический перехват), поэтому, даже если вам не о чем беспокоиться, вы все равно можете увидеть, что ваш код плохой.

пытаться
... код здесь
наконец
... код здесь

archived feature proposal gdscript

Самый полезный комментарий

@ salvob41 в этом случае вы можете использовать это:

if is_instance_valid(object):
    #Do what you want if the node exists

@Kotzuo , это не всегда работает, поскольку это не детерминированный поток выполнения. функция process опасна

Вы абсолютно, на 100% правы ... это опасный паттерн

в случае же сетевого кода это коричневые штаны! вещь может иногда отключаться между получением кодов состояния подключения!

В GDScript немного утомляет эта защита от других людей, у которых нет (или не думают, что у них есть) этой проблемы ... и предлагать им, может быть, другие люди кодируют с другими шаблонами. Может быть, вы кодируете "правильно", а мой способ "неправильный" .... я не знаю, но я успешно кодировал этот способ в течение нескольких лет, и теперь получение этой функции не заставит их использовать ее, но ее отсутствие заставляет меня писать как они.

Если у нас есть команда try and catch, никто не должен ее использовать ... такие люди, как я и этот парень, хотят, чтобы мы могли кодировать так, как нам нравится.

Все 13 Комментарий

Хм, я предпочитаю сбои в моей программе странному поведению из-за плохого кода. Пожалуйста, не бери
неправильно, я люблю исключения, когда они сделаны правильно.

Я считаю, что это следует оставить для версии 2.1 для нового статически (возможно, смешанного с «динамическими» функциями?) Типизированного скрипта.

Исключений не будет. Годо создан для того, чтобы вещи продолжали работать даже
если состояние непоследовательно, и в то же время сообщает об ошибках

Сб, 30 января 2016 г., в 8:18, RebelliousX [email protected]
написал:

Хм, я предпочитаю сбои в моей программе странному поведению из-за плохого
код. Пожалуйста, не бери
неправильно, я люблю исключения, когда они сделаны правильно.

Я считаю, что это следует оставить для v2.1 для нового статического (смешанного с
"динамические" возможности?) напечатанный скрипт.

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/godotengine/godot/issues/3516#issuecomment -177151923.

это идея подумайте об этом. скажем, например, у вас есть куча изображений в папке, вы хотите открыть их все как набор плиток, но скажите, что изображений нет, ничего не должно происходить. хотя может показаться, что вы можете просто проверить наличие null в папке, где ваш код на самом деле проще в блоке try, ПОПРОБУЙТЕ, чтобы сделать это, если не так круто. вся концепция утиного кода - это еще больше утиного кода.

плюс даже у python есть попытки, за исключением того, что он делает то же самое, что я предлагаю, так что это не является чем-то неслыханным

да, это долго оценивали и рассматривали, видя плюсы и минусы.
исключения не будут добавлены

Сб, 30 января 2016 г., в 8:45, trollworkout [email protected]
написал:

это идея подумайте об этом. скажем, например, у вас есть куча изображений в
папка, которую вы хотите открыть как набор плиток, но скажите, что нет изображений
ничего не должно происходить. хотя может показаться, что вы можете просто проверить нулевое значение
в папке ваш код на самом деле проще в блоке try TRY, чтобы сделать это, если
не это круто. вся концепция утиного кода - это еще больше утиного кода.

плюс даже у python есть попытки, за исключением того, что я предлагаю то же самое,
не является чем-то необычным

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/godotengine/godot/issues/3516#issuecomment -177155429.

нет проблем :)

С вами никогда не случалось, чтобы вы проверяли, работает ли процесс узла, если экземпляр узла действителен, а затем он терпит неудачу, потому что «индекс недействителен для предыдущего освобожденного экземпляра»?

Поскольку ошибка не является детерминированной и может сразу вызвать сбой игры (и это раздражает, особенно потому, что в экспортированной игре, о которой вообще не сообщается). Попытка поймать устранит ошибку чрезвычайно простым и понятным способом.

Это все еще ФИРМА нет?

@ salvob41 в этом случае вы можете использовать это:

if is_instance_valid(object):
    #Do what you want if the node exists

@ salvob41 в этом случае вы можете использовать это:

if is_instance_valid(object):
    #Do what you want if the node exists

@Kotzuo , это не всегда работает, поскольку это не детерминированный поток выполнения. функция process опасна

@ salvob41 в этом случае вы можете использовать это:

if is_instance_valid(object):
    #Do what you want if the node exists

@Kotzuo , это не всегда работает, поскольку это не детерминированный поток выполнения. функция process опасна

Вы абсолютно, на 100% правы ... это опасный паттерн

в случае же сетевого кода это коричневые штаны! вещь может иногда отключаться между получением кодов состояния подключения!

В GDScript немного утомляет эта защита от других людей, у которых нет (или не думают, что у них есть) этой проблемы ... и предлагать им, может быть, другие люди кодируют с другими шаблонами. Может быть, вы кодируете "правильно", а мой способ "неправильный" .... я не знаю, но я успешно кодировал этот способ в течение нескольких лет, и теперь получение этой функции не заставит их использовать ее, но ее отсутствие заставляет меня писать как они.

Если у нас есть команда try and catch, никто не должен ее использовать ... такие люди, как я и этот парень, хотят, чтобы мы могли кодировать так, как нам нравится.

Это трудное решение. Но, поскольку godot не очень хорошо обрабатывает ошибки, мы можем попытаться обернуть каждое возвращаемое значение null / error на другой язык, который поддерживает обработку ошибок так, как мы хотим.
Swift - хорошая альтернатива :

Обработка ошибок в Swift похожа на обработку исключений в других языках с использованием ключевых слов try, catch и throw. В отличие от обработки исключений во многих языках, включая Objective-C, обработка ошибок в Swift не требует раскрутки стека вызовов, что может быть дорогостоящим в вычислительном отношении. Таким образом, рабочие характеристики оператора throw сравнимы с характеристиками оператора return.

Не должно быть проблем, если есть способ использовать Swift. Я новичок в Годо и слышал, что есть способ динамически связывать другие языки ...
О, еще одна хорошая новость. В 2020 году swift добавит официальную поддержку Windows.
Я полный новичок в этой теме, но у нас может быть способ получить обработку ошибок без 1 тысячи операторов if и необязательного логического потока.

да, это долго оценивали и рассматривали, видя плюсы и минусы.
исключения не будут добавлены

Сб, 30 января 2016 г., в 8:45, trollworkout [email protected]
написал:

это идея подумайте об этом. скажем, например, у вас есть куча изображений в
папка, которую вы хотите открыть как набор плиток, но скажите, что нет изображений
ничего не должно происходить. хотя может показаться, что вы можете просто проверить нулевое значение
в папке ваш код на самом деле проще в блоке try TRY, чтобы сделать это, если
не это круто. вся концепция утиного кода - это еще больше утиного кода.
плюс даже у python есть попытки, за исключением того, что я предлагаю то же самое,
не является чем-то необычным
-
Ответьте на это письмо напрямую или просмотрите его на GitHub
# 3516 (комментарий) .

Что ж, прошло 4 года с тех пор, как эта тема началась (и закончилась), и все еще есть люди, которые сталкиваются с этой проблемой (я, например). Я пробовал ! = Null , is_instance_valid , это бесполезно, потому что состояние ссылочного узла просто меняется между проверкой достоверности и вызовом метода ссылки. Попробуйте .. catch ( кроме чего угодно ) решит эту проблему за секунду.

@reduz, пожалуйста,
Я хочу обработать json, чтобы он не приводил к сбою редактора при назначении недопустимого типа.
Godot - это не то, что я считаю стабильным, он вылетает у меня каждый день из-за того, что gdscript не набирается статически

@ Shadowblitz16 Это уже подробно обсуждалось, и теперь ясно, что исключения не будут добавляться в GDScript. Если вы хотите использовать исключения, используйте другой язык, который их поддерживает, например C #.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги