|
|
|
Безымянный (случайно :)) exception ВНЕ when блока допускается компилятором. Зачем ?
|
|||
|---|---|---|---|
|
#18+
hi all Как известно из доки: http://www.firebirdsql.org/refdocs/langrefupd15-psql-exception.html Rethrowing a caught exception Within the exception handling block only , you can rethrow the caught exception or error by giving the EXCEPTION command without any arguments. Outside such blocks, this “bare” command has no effect. Поэтому вот такой код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. - не выкинет исключения при таком вызове: Код: plaintext 1. 2. 3. (т.е. просто втихаря запишет в таблицу tlog). Получается, что если забыть указать имя исключения, то вся логика летит к ЧМ. Зачем так было сделано ? Какой смысл допускать команду, которая вроде бы говорит "хальт!", а на самом деле ничего не делает ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 21:49 |
|
||
|
Безымянный (случайно :)) exception ВНЕ when блока допускается компилятором. Зачем ?
|
|||
|---|---|---|---|
|
#18+
Таблоид> Получается, что если забыть указать имя исключения, то вся логика летит к ЧМ. Какая логика? По-моему, всё правильно отработано. > Зачем так было сделано ? Скорее всего трудно/невозможно/поленились сделать проверку наличия/нахождения внутри блока обработки ошибок. А что? > Какой смысл допускать команду, которая вроде бы > говорит "хальт!", а на самом деле ничего не делает ? Ну NOP тебя тоже возмущает или что именно? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 22:03 |
|
||
|
Безымянный (случайно :)) exception ВНЕ when блока допускается компилятором. Зачем ?
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамТаблоид> Получается, что если забыть указать имя исключения, то вся логика летит к ЧМ. Какая логика? По-моему, всё правильно отработано."Как же это так, кормилец ?!" (С) Почему ты считаешь, что "всё правильно", ведь если указать имя эксепшена (т.е. "exception ex_bad_rows_found ;"), то выполняемый код действительно вылетит нахрен - а мне нужно было именно это! Тогда как при случайно пропущенном имени этого эксепшена будет дальше работать... Просто зарегистрит там ошибку (в автономке) и НИЧЕГО не выдаст "на гор а "! Гаджимурадов Рустам> Зачем так было сделано ? Скорее всего трудно/невозможно/поленились сделать проверку наличия/нахождения внутри блока обработки ошибок. А что?Ну, я налетал на эту хрень уже, месяца 2-3 взад, но вот забыл, блин! И сидел три часа пялился, понять не мог :-) Гаджимурадов Рустам> Какой смысл допускать команду, которая вроде бы > говорит "хальт!", а на самом деле ничего не делает ? Ну NOP тебя тоже возмущает или что именно?NOP - он сам за себя честно говорит: "я - NOP, не делаю нихрена". А тут: "я - эксепшен (хоть и без имени... ну и что, подумаешь ?)! И обязательно прерву твою программу!" - а на самом деле ничего не делает. Чуешь разницу ? :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 22:13 |
|
||
|
Безымянный (случайно :)) exception ВНЕ when блока допускается компилятором. Зачем ?
|
|||
|---|---|---|---|
|
#18+
Таблоид> Почему ты считаешь, что "всё правильно" Потому работает так как задокументировано и так как ожидается, если не логично, то точно не нелогично. > вылетит нахрен - а мне нужно было именно это! Если тебе нужно, чтобы вылетело нахрен - пиши как именно нахрен должо вылететь. Логично? > при случайно пропущенном имени этого эксепшена будет дальше работать... У меня в голове логика "случайного пропущения имени эксепшена" не укладывается. Если я хочу выдать ошибку нахрен - я указываю какую, если я хочу создать таблицу нахрен - указываю имя, поля и т.д. Случайностей тут нет. Я готов с тобой согласиться, что лучше было бы не молчать при компиляции таких PSQL-блоков, а выдавать dynamic/compile error - но с этим тебе в трекер, не сюда. > Ну, я налетал на эту хрень уже, месяца 2-3 взад, но вот забыл, блин! Бывает, чего уж там. В отпуск сходи, лето, море, нервы подлечи, зрение, внимание. Я вроде несколько раз рассказывал, как мы вдвоём минут 10 перепутанные параметры Pos не замечали. После забытых Next-ов я после "While Not Eof" автоматически сразу пишу "Next End" - рефлекторно. То же самое с while и inc/dec в EB - первое время тоже забывал, а там это похуже, чем на клиенте. Тебя это, кстати, не бесит, нет? Тоже ведь "случайно забыл, блин!" :-) > Чуешь разницу ? :-) Нет. Я разницу не чую, а читаю. Доку. :) Вот к примеру какую ошибку он должен выкинуть? -104, UnknownNahrenError? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 22:30 |
|
||
|
Безымянный (случайно :)) exception ВНЕ when блока допускается компилятором. Зачем ?
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам> вылетит нахрен - а мне нужно было именно это! Если тебе нужно, чтобы вылетело нахрен - пиши как именно нахрен должо вылететь. Логично? Если я ловлю чрезвычайно трудную ошибку, создавая всякие там отладочные процедурки-"ловушки", которые долдны кое-что проверять и тут же выкидывать при обнаружении трабла, то за каким псом мне говорить "как именно" вылетело - ведь на клиенте будет видно стек вызовов, с точностью до строки + столба! А сейчас приходится: 1) не забыть создать эксепшен, который будет не нужен после этого; 2) прошерстить весь код: а вдруг где-то еще (вовне when-блока) забыл воткнуть имя этого эксепшена ? Гаджимурадов РустамНет. Я разницу не чую, а читаю. Доку. :) Вот к примеру какую ошибку он должен выкинуть? -104, UnknownNahrenError? Всю доку в башке не удержишь, сколько не читай. Стоило месяц не создавать процедуры, и вот - напоролся ИМХО, хоть какое-то предупреждение компилер мог бы выдавать. Или IBExpert (он ведь много умеет: например, про select * from tratata страшилку говорит, или про неюзаемые переменные, etc) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 22:45 |
|
||
|
Безымянный (случайно :)) exception ВНЕ when блока допускается компилятором. Зачем ?
|
|||
|---|---|---|---|
|
#18+
Таблоид> ведь на клиенте ... ... не будет видно ни кода, ни текста ошибки. > А сейчас приходится: > 1) не забыть создать эксепшен, который будет не нужен после этого; Так не создавай его. Кидай любой доступный. > 2) прошерстить весь код: а вдруг где-то еще (вовне when-блока) забыл воткнуть имя этого эксепшена ? Неправильно. Правильно - везде втыкать имя эксепшена, делая по необходимости исключение для when-блока. > Или IBExpert Саша тут недалеко, рядом. Попроси у него. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 23:35 |
|
||
|
Безымянный (случайно :)) exception ВНЕ when блока допускается компилятором. Зачем ?
|
|||
|---|---|---|---|
|
#18+
ТаблоидА тут: "я - эксепшен (хоть и без имени... ну и что, подумаешь ?)! И обязательно прерву твою программу!" - а на самом деле ничего не делает. эта команда всего-навсего заново выбрасывает ранее пойманное исключение. Не было поймано исключение - ничего не генерит. Никаких "обязательно прерву" - это ты сам додумал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 23:38 |
|
||
|
Безымянный (случайно :)) exception ВНЕ when блока допускается компилятором. Зачем ?
|
|||
|---|---|---|---|
|
#18+
dimitrэта команда всего-навсего заново выбрасывает ранее пойманное исключение. Не было поймано исключение - ничего не генерит. Никаких "обязательно прерву" - это ты сам додумал.Она ведь может его выбросить только в случае, когда сама находится в when-блоке, нет разве ? В большом коде трудно найти такую засаду. Даже пустые when any do begin end - и то проще. В общем, http://tracker.firebirdsql.org/browse/CORE-4474 - и пусть меня дальше там побьют, но истина дороже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 23:43 |
|
||
|
Безымянный (случайно :)) exception ВНЕ when блока допускается компилятором. Зачем ?
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамТаблоид> ведь на клиенте ... ... не будет видно ни кода, ни текста ошибки. Ну как это "не будет", когда во: Код: plaintext 1. 2. 3. (но это при указании имени эксепшена, ес-но). Гаджимурадов Рустам> А сейчас приходится: > 1) не забыть создать эксепшен, который будет не нужен после этого; Так не создавай его. Кидай любой доступный.Зачем притягивать за уши "любой доступный", когда они все у мну со "своим строгим смыслом" ? С толку сбивать будет такой мессаг. Гаджимурадов Рустам> 2) прошерстить весь код: а вдруг где-то еще (вовне when-блока) забыл воткнуть имя этого эксепшена ? Неправильно. Правильно - везде втыкать имя эксепшена , делая по необходимости исключение для when-блока.Когда непременно надо добавлять что-то необязательное в данной ситуации (я про отладочные процедурки, которые нужны только пока идёт поиск бага) - то также непременно про это забудешь. Это человечий фактор, чтоб его... Забыл воткнуть имя, находясь в куске кода *до* when-блока - получи гемор на весь день (если не вспомнишь вовремя, что так нельзя делать). Гаджимурадов Рустам> Или IBExpert Саша тут недалеко, рядом. Попроси у него.Спрошу, конечно, но он недавно мораторий на все хотелки объявил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 23:51 |
|
||
|
Безымянный (случайно :)) exception ВНЕ when блока допускается компилятором. Зачем ?
|
|||
|---|---|---|---|
|
#18+
Таблоид> Ну как это "не будет", когда во Вот так это не будет, без никаких "во". Читай внимательнее, что тебе пишут, а не что ты пишешь и хочешь видеть. > они все у мну со "своим строгим смыслом" ? Нагло врёшь. Если у тебя все со своим строгим смыслом, значит, ты и в конкретном случае хочешь "свой со строгим смыслом". Какой? > Когда непременно надо добавлять что-то необязательное ... > то также непременно про это забудешь. Ничего подобного, и отладочные процедурки тут не при чём. Тут привычка и культура кодирования. Я ж тебе привёл пример - цикл while легко становится бесконечным если забыть или неправильно написать любое из трёх его условий. Тебя это не бесит, нет? > Спрошу, конечно, но он недавно мораторий на все хотелки объявил. А чего так, времени нет или релиз большой готовит? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2014, 00:58 |
|
||
|
Безымянный (случайно :)) exception ВНЕ when блока допускается компилятором. Зачем ?
|
|||
|---|---|---|---|
|
#18+
ТаблоидГР> Правильно - везде втыкать имя эксепшена, ГР> делая по необходимости исключение для when-блока. Когда непременно надо добавлять что-то необязательное в данной ситуации (я про отладочные процедурки, которые нужны только пока идёт поиск бага) Кстати, тут ты тоже мягко говоря зарапортовался, ибо конкретно в "отладочных процедурах" сабж практически не нужен, там можно тупо в каждом случае бросать эксепшен, как я и сказал выше. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2014, 01:01 |
|
||
|
Безымянный (случайно :)) exception ВНЕ when блока допускается компилятором. Зачем ?
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам> они все у мну со "своим строгим смыслом" ? Нагло врёшь. Если у тебя все со своим строгим смыслом, значит, ты и в конкретном случае хочешь "свой со строгим смыслом". Какой? У мну в коде где-то есть трудно уловимая бага, проявляется только при большом числе коннектов. Приводит к отрицательным остаткам по кол-ву. В коде стоит ловушка: как только лезет check на отрицат. кол-во - немедленно всё прекращается и выбрасывается "дамп" грязных данных некоторых таблиц. Ну так вот: бьюсь третий день, найти - не могу. Тогда решил поставить побольше ловушек, чтобы они раньше срабатывали. Мне в данном случае пофигу, какая именно из них сработала, т.к. isql при эксепшене выдаёт стек вызовов и найти соотв место - дело 5 секунд. Так что тут действительно нет резона добавлять имя исключению, ибо оно - просто для отладки, временное. Ловушка, короче. Гаджимурадов РустамЯ ж тебе привёл пример - цикл while легко становится бесконечным если забыть или неправильно написать любое из трёх его условий. Тебя это не бесит, нет? Ну так while, как и NOP, говорит сам за себя: "я - цЫкл! могу идти до Второго пришествия, проверь меня!". Я на самом деле не врубаюсь в следующее: зачем допускать неименованный exception вне when-блока, если он ведёт себя как NOP, т.е. просто дезинформирует того, кто не знает или забыл про эту "мегафичу". Гаджимурадов Рустам> Спрошу, конечно, но он недавно мораторий на все хотелки объявил. А чего так, времени нет или релиз большой готовит?Ну, ему надо в ИБЭ много чего допиливать в связи с изменениями, которые уже есть и еще будут. А тут мы лезем со своими хотелками... :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2014, 16:55 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38682394&tid=1563494]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
242ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 205ms |
| total: | 567ms |

| 0 / 0 |
