微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何打印 Elixir 错误

如何解决如何打印 Elixir 错误

所以我正在尝试基于 Elixir 的项目。然而,Elixir 中的任何错误都不会抛出人类可读的错误代码,而是键和值的嵌套结构(嵌套在多种类型的括号中)。很难辨别嵌套在何处。举个例子:

no match of right hand side value: {:ok,%HTTPoison.Response{body: %{"error" => %{"index" => "comments","index_uuid" => "_na_","reason" => "no such index [comments]","resource.id" => "comments","resource.type" => "index_or_alias","root_cause" => [%{"index" => "comments","type" => "index_not_found_exception"}],"type" => "index_not_found_exception"},"status" => 404},headers: [{"content-type","application/json; charset=UTF-8"},{"content-length","377"}],request: %HTTPoison.Request{body: "{\"_source\":false,\"from\":0,\"query\":{\"bool\":{\"must\":{\"range\":{\"posted_at\":{\"gt\":\"Now-1w\"}}},\"must_not\":[{\"terms\":{\"image_tag_ids\":[4,7]}},{\"term\":{\"hidden_from_users\":true}}]}},\"size\":6,\"sort\":{\"posted_at\":\"desc\"},\"track_total_hits\":true}",headers: [{"Content-Type","application/json; charset=UTF-8"}],method: :post,options: [],params: %{},url: "http://elasticsearch:9200/comments/_search"},request_url: "http://elasticsearch:9200/comments/_search",status_code: 404}}

请注意,我不是在询问这个错误;我问的是这种错误风格。

是否有一种标准方法可以“漂亮地打印”Elixir 错误

解决方法

这些确实很难阅读。但请记住,在错误中返回完整结构通常是有意完成的:例如,您通常可以直接将值复制并粘贴到 iex 会话中,并使用它来测试有问题的代码。换句话说,这些错误通常意味着人类可以阅读

但是,有一些技巧可能对您有所帮助。第一个是简单的 inspect/2 函数:它可以限制消息的大小并将复杂的结构字符串化(这对于日志记录非常有用)。它有一个 pretty 选项,这可能是您所追求的。您可能还想尝试其他一些选项。

inspect(some_error,pretty: true)

另一种技术更具体:有时您必须“解开”错误以使其更具可读性。有时会有帮助程序(想想 Phoenix 视图帮助程序格式化 Ecto 错误或 Ecto.Changeset.traverse_errors/2 是处理使错误更具可读性的帮助程序函数的示例)。错误消息没有“一刀切”的形式——它们通常特定于用例。

最后,值得一提的是,模式匹配尤其可以帮助您控制代码流,以便您更谨慎地保护成功与失败的区别,并帮助您解决不同类型的错误。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。