Обработка исключений

Программирование на Юнити.

Обработка исключений

Сообщение EvgeniyT 17 янв 2011, 19:27

Каким образом можно обрабатывать исключения? На класс Exception Unity сильно ругается. Словом, следующий код приведёт к ошибке:

Синтаксис:
Используется csharp
try
{

}
catch (System.Exception error)
{

}
 


Если нельзя использовать Exception, то и наследоваться от него нельзя. Значит отпадает вариант с написанием своего класса испключений. Так как же тогда их ловить? Можно конечно просто ничего не передавать в параметрах для catch, но это не всегда удобно.
EvgeniyT
UNIт
 
Сообщения: 142
Зарегистрирован: 14 дек 2010, 19:06
  • ICQ

Re: Обработка исключений

Сообщение Neodrop 17 янв 2011, 19:46

Ну очень хотелось бы увидеть, на что у вас там "ругается". Ни разу не видел за два года работы с напильником. Уважьте копипастом то? (popcorn)
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Обработка исключений

Сообщение Sef 17 янв 2011, 20:10

А я недавно начал постигать (c#) и вообще не могу понять на кой эти исключения при if, else? :- Может примеры такие попадались где спокойно исключения можно заменить...
Аватара пользователя
Sef
Старожил
 
Сообщения: 595
Зарегистрирован: 29 окт 2009, 13:24
  • ICQ

Re: Обработка исключений

Сообщение EvgeniyT 17 янв 2011, 20:24

Neodrop писал(а):Ну очень хотелось бы увидеть, на что у вас там "ругается". Ни разу не видел за два года работы с напильником. Уважьте копипастом то? (popcorn)


Очень обнадёживает! Сейчас перепроверю, может и правда всё работает.
EvgeniyT
UNIт
 
Сообщения: 142
Зарегистрирован: 14 дек 2010, 19:06
  • ICQ

Re: Обработка исключений

Сообщение EvgeniyT 17 янв 2011, 20:40

Ну вот! Перепроверил. Вот код:

Синтаксис:
Используется csharp
IEnumerator Start ()
{
    WWW download = new WWW("file://G:/StreamedWebplayer.unity3d");
    yield return download;

    AssetBundle asb = download.assetBundle;
    try
    {
      Application.LoadLevelAdditive("Scene");
    }
    catch(Exception err)
    {
      print("Error");
    }
}
 


Если оставить список параметров в catch пустым, то всё будет ок. Если оставить его таким, как у меня в коде, получаю следующее:

Скрытый текст:
Unhandled Exception: System.ArgumentException: Trying to emit a local from a different ILGenerator.

at System.Reflection.Emit.ILGenerator.Emit (OpCode opcode, System.Reflection.Emit.LocalBuilder local) [0x00000] in <filename unknown>:0

at Mono.CSharp.LocalInfo.EmitAssign (Mono.CSharp.EmitContext ec) [0x00000] in <filename unknown>:0

at Mono.CSharp.VariableReference.EmitAssign (Mono.CSharp.EmitContext ec, Mono.CSharp.Expression source, Boolean leave_copy, Boolean prepare_for_load) [0x00000] in <filename unknown>:0

at Mono.CSharp.Catch.DoEmit (Mono.CSharp.EmitContext ec) [0x00000] in <filename unknown>:0

at Mono.CSharp.Statement.Emit (Mono.CSharp.EmitContext ec) [0x00000] in <filename unknown>:0

at Mono.CSharp.TryCatch.DoEmit (Mono.CSharp.EmitContext ec) [0x00000] in <filename unknown>:0

at Mono.CSharp.Statement.Emit (Mono.CSharp.EmitContext ec) [0x00000] in <filename unknown>:0

at Mono.CSharp.Block.DoEmit (Mono.CSharp.EmitContext ec) [0x00000] in <filename unknown>:0

at Mono.CSharp.Block.Emit (Mono.CSharp.EmitContext ec) [0x00000] in <filename unknown>:0

at Mono.CSharp.Block.DoEmit (Mono.CSharp.EmitContext ec) [0x00000] in <filename unknown>:0

at Mono.CSharp.Block.Emit (Mono.CSharp.EmitContext ec) [0x00000] in <filename unknown>:0

at Mono.CSharp.Iterator.EmitMoveNext (Mono.CSharp.EmitContext ec, Mono.CSharp.Block original_block) [0x00000] in <filename unknown>:0

at Mono.CSharp.IteratorStatement.DoEmit (Mono.CSharp.EmitContext ec) [0x00000] in <filename unknown>:0

at Mono.CSharp.Statement.Emit (Mono.CSharp.EmitContext ec) [0x00000] in <filename unknown>:0

at Mono.CSharp.Block.DoEmit (Mono.CSharp.EmitContext ec) [0x00000] in <filename unknown>:0

at Mono.CSharp.Block.Emit (Mono.CSharp.EmitContext ec) [0x00000] in <filename unknown>:0

at Mono.CSharp.ExplicitBlock.Emit (Mono.CSharp.EmitContext ec) [0x00000] in <filename unknown>:0

at Mono.CSharp.ToplevelBlock.Emit (Mono.CSharp.EmitContext ec) [0x00000] in <filename unknown>:0

at Mono.CSharp.MethodData.Emit (Mono.CSharp.DeclSpace parent) [0x00000] in <filename unknown>:0

at Mono.CSharp.MethodOrOperator.Emit () [0x00000] in <filename unknown>:0

at Mono.CSharp.Method.Emit () [0x00000] in <filename unknown>:0



И, что самое интересное, следующий код ведёт себя нормально:

Синтаксис:
Используется csharp
try
    {
      Application.LoadLevelAdditive("Scene");
    }
    catch(Exception err)
    {
      print(err.Message);
    }
 
Последний раз редактировалось EvgeniyT 17 янв 2011, 20:43, всего редактировалось 1 раз.
EvgeniyT
UNIт
 
Сообщения: 142
Зарегистрирован: 14 дек 2010, 19:06
  • ICQ

Re: Обработка исключений

Сообщение EvgeniyT 17 янв 2011, 20:41

Кстати примерно то же получал, когда подключал System.Data.Linq
EvgeniyT
UNIт
 
Сообщения: 142
Зарегистрирован: 14 дек 2010, 19:06
  • ICQ

Re: Обработка исключений

Сообщение EvgeniyT 17 янв 2011, 20:50

Sef писал(а):А я недавно начал постигать (c#) и вообще не могу понять на кой эти исключения при if, else? :- Может примеры такие попадались где спокойно исключения можно заменить...


Если Вы уверены на все 100%, что в состоянии проверить все возможные ошибки через if, то, несомненно, лучше так и делать т.к. исключения работают медленнее...но, к сожалению, далеко не всегда есть такая уверенность.
В добавок ко всему система исключений является очень удобной для сообщения об ошибке "наверх" из метода, где произошла ошибка...ну и много-много удобных возможностей.
EvgeniyT
UNIт
 
Сообщения: 142
Зарегистрирован: 14 дек 2010, 19:06
  • ICQ

Re: Обработка исключений

Сообщение gnoblin 18 янв 2011, 18:40

Работают исключения ;)
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Обработка исключений

Сообщение Neodrop 18 янв 2011, 20:06

Но, не абсолютно все ошибки гасятся через исключения. Имейте в виду.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Обработка исключений

Сообщение EvgeniyT 18 янв 2011, 20:13

Хорошо, спасибо за внимание. :)
EvgeniyT
UNIт
 
Сообщения: 142
Зарегистрирован: 14 дек 2010, 19:06
  • ICQ


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6