Идентификация Типа исключительной ситуации в обработчике

Смотрите на http://www.maintainj.com

, Это не знает, может ли это отфильтровать вызовы библиотеки, но это имеет разумный графический фронтэнд и, кажется, прослеживает даже очень крупные приложения.

35
задан Ruben Bartelink 15 March 2013 в 03:00
поделиться

5 ответов

ОБНОВЛЕНО: предполагая C # 6 , есть вероятность, что ваш случай может быть выражен как фильтр исключений. Это идеальный подход с точки зрения производительности, если предположить, что ваше требование может быть выражено в его терминах, например:

try
{
}
catch ( Web2PDFException ex ) when ( ex.Code == 52 )
{
}

Предполагая, что C # <6, наиболее эффективным является перехват определенного типа Exception и обработка на основе на что. Любую комплексную обработку можно выполнить отдельно

try
{
}
catch ( Web2PDFException ex )
{
}

или

try
{
}
catch ( Web2PDFException ex )
{
}
catch ( Exception ex )
{
}

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

 if( err is Web2PDFException)
 {
 }

или (в некоторых случаях, если вам нужно сделать более сложную структуру иерархии типов, которая не может быть выражена с помощью is )

 if( err.GetType().IsAssignableFrom(typeof(Web2PDFException)))
 {
 }

или переключитесь на VB.NET или F # и используйте или Тип. IsAssignableFrom в фильтрах исключений

44
ответ дан 27 November 2019 в 06:23
поделиться
try
{
    // Some code
}
catch (Web2PDFException ex)
{
    // It's your special exception
}
catch (Exception ex)
{
    // Any other exception here
}
16
ответ дан 27 November 2019 в 06:23
поделиться

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

try
{
    //code
}
catch (Web2PDFException ex)
{
    //Handle the exception here
}

Вы, конечно, можете использовать что-то вроде этого, если вы настаиваете:

try
{
}
catch (Exception err)
{
    if (err is Web2PDFException)
    {
        //Code
    }
}
2
ответ дан 27 November 2019 в 06:23
поделиться

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

this.Data["mykey"]="keyvalue"; //you can add any type of data if you want 

, а затем вы можете получить свое значение

string mystr = (string) err.Data["mykey"];

для получения дополнительной информации: http://msdn.microsoft.com/en-us/library/system.exception.data.aspx

2
ответ дан 27 November 2019 в 06:23
поделиться

У вас есть машина с Windows или Linux?

В Windows cron называется «Запланированные задачи». Он находится в Панели управления. Вы можете настроить запуск нескольких скриптов в указанное время на панели управления. Используйте мастер, чтобы определить запланированное время. Убедитесь, что PHP вызывается в вашем PATH.

В Linux вы можете создать crontab для вашего текущего пользователя, набрав:

crontab -e [username]

Если эта команда завершится неудачно, вероятно, что cron не установлен. Если вы используете систему на основе Debian (Debian, Ubuntu), попробуйте сначала выполнить следующие команды:

sudo apt-get update
sudo apt-get install cron

Если команда выполняется правильно, откроется текстовый редактор. Теперь вы можете добавить командные строки в файл crontab. Чтобы запускать что-то каждые пять минут:

*/5 * * * *  /home/user/test.pl

Синтаксис в основном такой:

9
ответ дан 27 November 2019 в 06:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: