Language agnostic 如何从库传递非致命警告

Language agnostic 如何从库传递非致命警告,language-agnostic,error-handling,Language Agnostic,Error Handling,库函数解析文件并返回对象。如果解析器遇到未知数据、缺少值等,它不应该抛出异常并停止解析(因为这不是致命的),但应该有一种方法将这些信息传递给调用方(例如,这样可以在UI中显示警告)。如何返回这些警告?我正在考虑将回调函数/对象传递到库中,是否有其他可能的解决方案?常见的解决方案是通过相关函数提供警告。这样,只有当客户端代码需要时才会读取警告。返回的对象可能包含警告。在Web服务中,我通常处理包装类,类似于: class Wrapper { List<Warning> Warn

库函数解析文件并返回对象。如果解析器遇到未知数据、缺少值等,它不应该抛出异常并停止解析(因为这不是致命的),但应该有一种方法将这些信息传递给调用方(例如,这样可以在UI中显示警告)。如何返回这些警告?我正在考虑将回调函数/对象传递到库中,是否有其他可能的解决方案?

常见的解决方案是通过相关函数提供警告。这样,只有当客户端代码需要时才会读取警告。

返回的对象可能包含警告。在Web服务中,我通常处理包装类,类似于:

class Wrapper {
    List<Warning> Warnings { get; set; }
    bool HasWarnings { get { return Warnings != null && Warnings.Count > 0; } }
    MyObject Result { get; set; }
}
类包装器{
列出警告{get;set;}
bool HasWarnings{get{return Warnings!=null&&Warnings.Count>0;}
MyObject结果{get;set;}
}

通过这种方式,接收端将负责决定是否对任何警告采取行动,但从其结构来看,调用Web服务的人也会清楚地看到可能存在警告。像这样的返回对象需要在接收端进行一些基本级别的错误检查。

如果您的编程语言支持它,我建议使用事件传递警告。调用程序可以捕获事件,然后根据事件通知传递的警告的严重性或类型决定如何处理该事件。对于事件,用户不必等待整个文件完成处理,就可以查看是否存在任何错误。如果您还提供了取消文件处理的方法,则如果他们认为引发的错误足够严重,则可以决定停止处理。

在伪代码中:

class ParseResult (
    Outcome <succesful, warnings, failed completely>,
    ParseOutput <result>,
    List<Warning> warnings
)
类解析结果(
结果,
解析输出,
列出警告
)

因此,您可以得到一个金块,在那里您可以快速打开最终结果,还可以获得状态和警告,我可以在解析器上轻松访问一组错误,如下所示:

public class Parser
{
   public bool HasErrors { 
     get { return ParseErrors != null && ParseErrors.Count > 0; } 
   }    
   public List<string> ParseErrors { get; set; }
   public object Parse(string fileName) {}
}
var p = new Parser();
var o = p.Parse("file.txt"); //Get object
if(p.HasErrors) //Uh oh, abort, do something with p.ParseErrors

您的意思是将警告存储在解析器对象中,并在解析后提供获取警告的方法吗?是的。只要您使用对象进行解析。