标签: custom-exceptions

8
推荐指数
1
解决办法
4393
查看次数

在C#中组织自定义异常

我正在创建一个C#应用程序,并尝试在适当时利用自定义异常.我在这里和MSDN设计指南中查看了其他问题,但没有遇到任何具体的问题,我在这里想知道.

如何组织自定义例外的最佳做法是什么?

例如,我有一个类Disk抛出一个InvalidDiskException.Disk是唯一抛出此异常的类.

目前,我有异常嵌套在Disk.cs文件中,如下所示:

Disk.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace OrganizingExceptionsInCSharp
{
    class Disk
    {
        [Serializable]
        public class InvalidDiskException : Exception
        {
            public InvalidDiskException() { }
            public InvalidDiskException(string message) : base(message) { }
            public InvalidDiskException(string message, Exception innerException) : base(message, innerException) { }
        }

        //
        // Code that throws the exception.
        //
    }
}
Run Code Online (Sandbox Code Playgroud)

是否应该将异常定义在与磁盘相同的级别(即未嵌套在内)?该异常应该嵌套在磁盘中,但保留它自己的部分文件吗?可能还有其他更好的选择吗?如果还有其他我没有想过的考虑因素,请告诉我.

c# custom-exceptions

8
推荐指数
1
解决办法
1403
查看次数

在这种情况下抛出什么类型的异常?

我正在编写ac#application,它使用自动化来控制另一个程序.当然,该程序必须运行才能使我的程序正常运行.当我的程序查找应用程序但找不到它时,我想抛出异常(现在我可以尝试打开应用程序,或者告诉用户打开它,或者......).

我应该实现自定义异常 - 还是使用现有的NotSupportedException(或其他.NET异常之一).如果是自定义异常,你会建议什么?我正在考虑实现一个自定义异常我称之为MyAppNameException然后只是使用该消息来声明问题是什么?

在那里的方式,让你的程序更具可读性和用户友好的抛出异常的一般规则,还是我只是给这个太多心思:)?

谢谢!

c# custom-exceptions

7
推荐指数
1
解决办法
205
查看次数

在C++中编写自定义异常

我来自Ruby和Java背景,最近开始探索C++.

虽然我通过简单地继承异常类来创建自定义异常的初始尝试失败了,但是我发现在网站上发布了以下示例:

class Exception : public exception
{
public:
  Exception(string m="exception!") : msg(m) {}
  ~Exception() throw() {}
  const char* what() const throw() { return msg.c_str(); }

private:
  string msg;
};
Run Code Online (Sandbox Code Playgroud)

我对C++语义的理解目前还不是很成熟,我希望能够更好地理解这里发生的事情.

在声明const char* what() const throw()中该部分的作用是const throw()什么,以及它是什么样的编程结构?

另外,throw()析构函数规范的目的和意图是什么~Exception(),为什么我需要有一个析构函数规范,虽然我不需要它特别做某事?不应该destructor继承异常就足够了吗?

c++ custom-exceptions

7
推荐指数
1
解决办法
2万
查看次数

带消息的C++异常

我不确定我的自定义异常方法是否正确.我想要做的是抛出自定义消息的异常,但似乎我创建了内存泄漏...

class LoadException: public std::exception {
private:
    const char* message;
public:
    LoadException(const std::string message);
    virtual const char* what() const throw();
};


LoadException::LoadException(const std::string message) {
    char* characters = new char[message.size() + 1];
    std::copy(message.begin(), message.end(), characters);
    characters[message.size()] = '\0';
    this->message = characters;
}
Run Code Online (Sandbox Code Playgroud)

我用它如下:

void array_type_guard(Local<Value> obj, const std::string path) {
    if (!obj->IsArray()) {
        throw LoadException(path + " is not an array");
    }
}

try {
    objects = load_objects();
} catch (std::exception& e) {
    ThrowException(Exception::TypeError(String::New(e.what())));
    return scope.Close(Undefined());
}
Run Code Online (Sandbox Code Playgroud)

我担心在构造函数中创建的数组永远不会被删除.但我不确定如何删除它 - 我应该添加析构函数还是使用完全不同的方法? …

c++ exception custom-exceptions

7
推荐指数
2
解决办法
2万
查看次数

asp.net mvc自定义异常过滤器强制返回完整视图,而不是局部

我有一个自定义异常过滤器,我通过向我的类添加[CustomExceptionFilter]属性来调用.它按照我的意愿工作,但是如果action方法返回一个局部视图(通过ajax请求),异常(基本上是一个重定向到一个未授权的页面),正在加载部分视图页.有没有办法可以强制它重新加载'父'网址?

以下是自定义异常过滤器的代码

public class CustomExceptionFilter : FilterAttribute, IExceptionFilter
{
    public void OnException(ExceptionContext filterContext)
    {
        if (filterContext.Exception.GetType() == typeof(CustomSecurityException))
        {
            filterContext.ExceptionHandled = true;
            RequestContext rc = new RequestContext(filterContext.HttpContext, filterContext.RouteData);
            string url = RouteTable.Routes.GetVirtualPath(rc, new RouteValueDictionary(new { Controller = "NoAccess", action = "Index", message = filterContext.Exception.Message })).VirtualPath;
            filterContext.HttpContext.Response.Redirect(url, true);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc filter custom-exceptions

6
推荐指数
1
解决办法
5683
查看次数

6
推荐指数
1
解决办法
4571
查看次数

在C#中捕获自定义异常

我创建了一个自定义异常类,如下所示

namespace testingEXception
{
    public class CustomException : Exception
    {            
        public CustomException()
        {
        }
        public CustomException(string message)
            : base(message)
        {
        }

        public CustomException(string message, Exception innerException)
            : base(message, innerException)
        {

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我在相同的解决方案中从另一个项目抛出异常

namespace ConsoleApplication1
{
    public class testClass
    {
        public void compare()
        {
            if (1 > 0)
            {
                throw new CustomException("Invalid Code");
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并像这样抓住它

    namespace testingEXception
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                testClass obj = new testClass();
                obj.compare();

            }
            catch …
Run Code Online (Sandbox Code Playgroud)

c# custom-exceptions

6
推荐指数
1
解决办法
1万
查看次数

为什么不需要捕获 IllegalArgumentException?

我不知道为什么IllegalArgumentException不类需要被逮住或声明,而其他的异常有(例如java.net.MalformedURLException)。

public void foo() {
    throw new IllegalArgumentException("spam");
}

public void bar() throws MalformedURLException { // required
    throw new MalformedURLException("ham");
}
Run Code Online (Sandbox Code Playgroud)

我知道Errors 不必声明,因为它们不打算被捕获。

我想声明一个新的异常,它也不需要被捕获。

java exception custom-exceptions throws

6
推荐指数
1
解决办法
1846
查看次数

PHP中记录自定义异常的最佳实践

我有一个自定义异常(在可能的其他自定义异常中进一步扩展)。我的项目需要记录发生的所有 customExceptions(及其所有后代)。我有一个可以记录 customException(和其他任何东西)的记录器。这样做的一种方法是在如下处理异常时显式记录异常。

try{
    //some exception occur
}
catch(customeException $e)
{
     $log->logException($e);
     $e->showMessage(); // or do anything that we have to do with the error.
}
Run Code Online (Sandbox Code Playgroud)

由于我们正在记录所有 customExceptions,我能想到的另一种方式是更新 customException 构造函数并在构造函数内部记录异常。通过这种方式,它确保记录所有 customException。但是,如果我们走这条路,我的问题是:

  1. 如何将记录器注入 customException?
  2. 会不会违反 SRP 原则?
  3. 从 OOP 的角度来看,它会被认为是不好的做法还是对此的最佳做法是什么?

php logging exception-handling custom-exceptions exception-logging

6
推荐指数
1
解决办法
1144
查看次数