В Python это называется попыткой, за исключением Java, наконец, попытаться поймать. Запустите код внутри блока try, если он не может выполнить вместо этого блок finally. Это может значительно упростить кодирование в gd-скрипте, удалив все сбои. Вам больше не придется беспокоиться о плохом коде. Иногда вам может потребоваться, чтобы 1 код работал с динамическим фрагментом данных, и вам не нужно было создавать дополнительные отказоустойчивые системы на случай, если вы скажете, что данных нет.
ВСЕ ошибки из блока неудачной попытки всегда будут отображаться в окне отладки (автоматический перехват), поэтому, даже если вам не о чем беспокоиться, вы все равно можете увидеть, что ваш код плохой.
пытаться
... код здесь
наконец
... код здесь
Хм, я предпочитаю сбои в моей программе странному поведению из-за плохого кода. Пожалуйста, не бери
неправильно, я люблю исключения, когда они сделаны правильно.
Я считаю, что это следует оставить для версии 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 #.
Самый полезный комментарий
Вы абсолютно, на 100% правы ... это опасный паттерн
в случае же сетевого кода это коричневые штаны! вещь может иногда отключаться между получением кодов состояния подключения!
В GDScript немного утомляет эта защита от других людей, у которых нет (или не думают, что у них есть) этой проблемы ... и предлагать им, может быть, другие люди кодируют с другими шаблонами. Может быть, вы кодируете "правильно", а мой способ "неправильный" .... я не знаю, но я успешно кодировал этот способ в течение нескольких лет, и теперь получение этой функции не заставит их использовать ее, но ее отсутствие заставляет меня писать как они.
Если у нас есть команда try and catch, никто не должен ее использовать ... такие люди, как я и этот парень, хотят, чтобы мы могли кодировать так, как нам нравится.