在Javaexception至less有这四个构造函数: Exception() Exception(String message) Exception(String message, Throwable cause) Exception(Throwable cause) 如果你想定义自己的扩展,你只需要声明一个派生的exception,并实现每个所需的构造函数调用相应超级构造函数 你怎么能在scala中实现同样的function呢? 到目前为止,我看到这篇文章和这个答案 ,但我怀疑必须有一个更简单的方法来实现这样一个共同的东西
我们目前正在辩论是否最好在WCF通道上抛出错误,而不是传递一个消息来指示服务的状态或响应。 故障来自WCF的内置支持,您可以使用内置的error handling程序并作出相应的反应。 但是,这会带来开销,因为在.NET中抛出exception可能会非常昂贵。 消息可以包含必要的信息,以确定您的服务调用发生了什么,而不会引发exception的开销。 然而,它需要几行重复的代码来分析消息并确定其内容之后的动作。 我们试图创build一个可以在我们的服务中使用的通用消息对象,这就是我们想到的: public class ReturnItemDTO<T> { [DataMember] public bool Success { get; set; } [DataMember] public string ErrorMessage { get; set; } [DataMember] public T Item { get; set; } } 如果我所有的服务电话都返回这个项目,我可以持续检查“成功”属性,以确定是否一切顺利。 然后在事件中出现错误消息string,表示出错了,如果需要的话,包含Dto的通用项目。 exception信息必须logging到中央日志logging服务,而不是从服务传回。 思考? 注释? 想法? build议? 在我的问题上进一步澄清 我遇到的问题是交stream业务规则。 就像,如果有人login,他们的帐户被locking,我该如何沟通? 他们的login显然失败,但由于“帐户locking”的原因而失败。 我也是: A)使用布尔值,抛出带locking消息帐户的Fault B)返回AuthenticatedDTO与相关信息
我在我的应用程序中使用单个传输客户端实例查询多个并行请求的elasticsearch。 我得到了以下的并行执行exception。 如何解决这个问题。 org.elasticsearch.common.util.concurrent.EsRejectedExecutionException: rejected execution (queue capacity 1000) on org.elasticsearch.search.action.SearchServiceTransportAction$23@5f804c60 at org.elasticsearch.common.util.concurrent.EsAbortPolicy.rejectedExecution(EsAbortPolicy.java:62) at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:821) at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1372) at org.elasticsearch.search.action.SearchServiceTransportAction.execute(SearchServiceTransportAction.java:509) at org.elasticsearch.search.action.SearchServiceTransportAction.sendExecuteScan(SearchServiceTransportAction.java:441) at org.elasticsearch.action.search.type.TransportSearchScanAction$AsyncAction.sendExecuteFirstPhase(TransportSearchScanAction.java:68) at org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction.performFirstPhase(TransportSearchTypeAction.java:171) at org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction.start(TransportSearchTypeAction.java:153) at org.elasticsearch.action.search.type.TransportSearchScanAction.doExecute(TransportSearchScanAction.java:52) at org.elasticsearch.action.search.type.TransportSearchScanAction.doExecute(TransportSearchScanAction.java:42) at org.elasticsearch.action.support.TransportAction.execute(TransportAction.java:63) at org.elasticsearch.action.search.TransportSearchAction.doExecute(TransportSearchAction.java:107) at org.elasticsearch.action.search.TransportSearchAction.doExecute(TransportSearchAction.java:43) at org.elasticsearch.action.support.TransportAction.execute(TransportAction.java:63) at org.elasticsearch.action.search.TransportSearchAction$TransportHandler.messageReceived(TransportSearchAction.java:124) at org.elasticsearch.action.search.TransportSearchAction$TransportHandler.messageReceived(TransportSearchAction.java:113) at org.elasticsearch.transport.netty.MessageChannelHandler.handleRequest(MessageChannelHandler.java:212) at org.elasticsearch.transport.netty.MessageChannelHandler.messageReceived(MessageChannelHandler.java:109) at org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) at org.elasticsearch.common.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:296) […]
Visual Studio Test可以使用ExpectedException属性检查预期的exception。 你可以传入这样的exception: [TestMethod] [ExpectedException(typeof(CriticalException))] public void GetOrganisation_MultipleOrganisations_ThrowsException() 您也可以像这样检查ExpectedException中包含的消息: [TestMethod] [ExpectedException(typeof(CriticalException), "An error occured")] public void GetOrganisation_MultipleOrganisations_ThrowsException() 但是在testingI18N应用程序时,我会使用资源文件来获取错误消息(如果需要,甚至可能决定testing错误消息的不同本地化版本,但Visual Studio不会让我这样做: [TestMethod] [ExpectedException(typeof(CriticalException), MyRes.MultipleOrganisationsNotAllowed)] public void GetOrganisation_MultipleOrganisations_ThrowsException() 编译器会出现以下错误: 一个属性参数必须是一个常量expression式,一个属性的typeofexpression式或数组创buildexpression式 有谁知道如何testing从资源文件中有消息的exception? 我考虑的一个select是使用自定义的exception类,但基于经常听到的build议,如: “如果你有一个错误条件,可以以不同于其他现有的exception的方式进行编程处理,那么就创build并抛出自定义的exception,否则就抛出一个现有的exception。 资源 我不希望在正常stream程中以不同的方式处理exception(这是一个严重的例外,所以我会进入恐慌模式),我不认为为每个testing用例创build例外是正确的。 有什么意见?
我有一个Django模型的自定义pipe理器。 我似乎无法赶上DoesNotExistexception在这里。 我知道如何在模型中做到这一点,但在这里不起作用: class TaskManager(models.Manager): def task_depend_tree(self, *args, **kwargs): if "id" in kwargs: try: task = self.get(id=kwargs["id"]) except DoesNotExist: raise Http404 Get_object_or_404也不起作用。 这里有什么问题?
在PHP中是否有一种NotImplementedError? 我想将这些添加到一些存根方法和接口,以警告扩展我的类,他们仍然有工作要做。 或者,这是在PHP中实现不同?
为什么从__toString()抛出exception是不可能的? class a { public function __toString() { throw new Exception(); } } $a = new a(); echo $a; 上面的代码产生这个: Fatal error: Method a::__toString() must not throw an exception in /var/www/localhost/htdocs/index.php on line 12 我被指向http://php.net/manual/en/migration52.incompatible.php这个行为描述,但为什么? 有什么理由要这样做? 可能有人知道这个吗? 在bug跟踪器php-dev-team像往常一样说只是看手册: http : //bugs.php.net/50699
我得到这个例外: 通信对象System.ServiceModel.Channels.ServiceChannel不能用于通信,因为它处于Faulted状态。 WCF服务使用默认的wsHttpBinding。 无论我在哪里使用WCF,我都以如下方式使用WCF: using (var proxy = new CAGDashboardServiceClient()) { proxy.Open(); var result = proxy.GetSiteForRegion(ddlRegions.SelectedValue); ddlSites.DataSource = result; ddlSites.DataBind(); proxy.Close(); } 消息中显示的错误行似乎是在最后一个proxy.close之后。 不知道发生了什么事。 我从Visual Studio 08内启动服务。 这里是跟踪信息: The communication object, System.ServiceModel.Channels.ServiceChannel, cannot be used for communication because it is in the Faulted state. Server stack trace: at System.ServiceModel.Channels.CommunicationObject.Close(TimeSpan timeout) Exception rethrown at [0]: at […]
有没有办法在全球范围内捕捉所有exception,包括Promiseexception。 例: window.onerror = function myErrorHandler(errorMsg, url, lineNumber) { alert("Error occured: " + errorMsg);//or any message return false; } var myClass = function(){ } var pr = new Promise(function(resolve, react){ var myInstance = new myClass(); myInstance.undefinedFunction(); // this will throw Exception resolve(myInstance); }); pr.then(function(result){ console.log(result); }); // i know right will be this: // pr.then(function(result){ […]
想知道在创buildexception消息时,我应该多less努力来强制有用的debugging信息,还是应该只相信用户提供正确的信息,或者将信息收集推迟到exception处理程序? 我看到很多人在做例外,如: throw new RuntimeException('MyObject is not an array') 或者用自定义的exception来扩展默认exception,这些exception不会做太多的事情,但可以改变exception的名称: throw new WrongTypeException('MyObject is not an array') 但是这不提供太多的debugging信息…并且不强制任何forms的错误信息。 所以,你可能会得到完全相同的错误产生两个不同的错误信息…例如“数据库连接失败”vs“无法连接到数据库” 当然,如果它顶到顶部,它会打印堆栈跟踪,这是有用的,但它并不总是告诉我我需要知道的一切,通常我最终不得不开始拍摄var_dump()语句来发现什么地方出了问题,在哪里…虽然这可能有点抵消了一个像样的exception处理程序。 我开始考虑类似下面的代码,在那里我要求exception的抛出者提供必要的参数来产生正确的错误信息。 我想这可能是这样的: 必须提供最低级别的有用信息 产生一些一致的错误消息 exception消息的模板都在一个位置(exception类),因此更容易更新消息… 但我发现它的缺点是它们很难使用(需要查找exception定义),因此可能会阻止其他程序员使用提供的exception。 我想就这个想法发表一些意见,并提供一个一致的,灵活的exception消息框架的最佳实践。 /** * @package MyExceptions * MyWrongTypeException occurs when an object or * datastructure is of the incorrect datatype. * Program defensively! * @param $objectName string name of object, […]