Clojure 中的自定义异常?

2023-12-25

我一直在尝试在 Clojure 中创建用户定义的异常,但遇到了各种各样的问题。我尝试了这里概述的方法:

http://en.wikibooks.org/wiki/Clojure_Programming/Concepts#User-Defined_Exceptions http://en.wikibooks.org/wiki/Clojure_Programming/Concepts#User-Defined_Exceptions

(gen-and-load-class 'user.MyException :extends Exception)

但这似乎在 Clojure 1.2 中不起作用(或者我做错了什么......)。我的环境是 Clojure 1.2、Emacs 和 lein swank。

感谢您的帮助!


除了生成自定义类之外,还有两种更简单的方法来使用自定义异常:

  1. Use 弹弓 https://github.com/scgilardi/slingshot- 这提供了定制throw+ and catch+允许您抛出和捕获任何对象以及异常的宏。

  2. 在 Clojure 1.4 及更高版本中,您可以使用clojure.core/ex-info http://clojure.github.io/clojure/clojure.core-api.html#clojure.core/ex-info and clojure.core/ex-data http://clojure.github.io/clojure/clojure.core-api.html#clojure.core/ex-data生成并捕获clojure.lang.ExceptionInfo类,它包装消息和数据映射。

使用它很简单:

(throw (ex-info "My hovercraft is full of eels"
                {:type :python-exception, :cause :eels}))

(try (...)
  (catch clojure.lang.ExceptionInfo e
    (if (= :eels (-> e ex-data :cause))
      (println "beware the shrieking eels!")
      (println "???"))))

或者在 midje 测试中:

(fact "should throw some eels"
    (...) 
    => (throws clojure.lang.ExceptionInfo
          #(= :eels (-> % ex-data :cause))))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Clojure 中的自定义异常? 的相关文章

  • 来自外部 DLL 的未处理的 DivideByZero 异常 - C#

    我有一个 C net 4 0 程序 其主要功能是从外部 FTP 库 项目引用的 dll 调用方法 逻辑位于 try catch 块中 catch 会打印错误 异常处理程序有一个通用参数 catch Exception ex IDE是VS 有
  • 语法错误可以处理吗?

    考虑以下代码 try if True a 1 It s missing a colon So it s a SyntaxError except SyntaxError print hey 你会期望它打印出来hey然而它提出了一个Synta
  • django order_by FieldError异常无法被捕获

    from django core exceptions import FieldError This is a method of a class def order item list self item list order items
  • 我应该始终使用 TryGetValue 来访问 .net 词典吗?

    In 另一个问题 https stackoverflow com questions 886814 why doesnt net provide us with the key when it raises a keynotfound ex
  • Clojure:对于 n 维

    Clojure 中的函数for可用于迭代嵌套序列 想象一个具有 x y 和 z 轴的 3D 空间 for x range 10 y range 5 z range 2 x y z 上面的代码将生成一个向量序列 表示长方体内所有可能的位置 当
  • 我在 android 上使用 java 时遇到异常 (java.lang.NoClassDefFoundError),为什么?

    这是我运行的线路 AudioInputStream clip1 AudioSystem getAudioInputStream new File wavFile1 这是我得到的异常 来自 LogCat 错误 AndroidRuntime 3
  • Python 中的“断言”有什么用?

    什么是assert意思是 它是如何使用的 The assert语句几乎存在于所有编程语言中 它有两个主要用途 它有助于在程序早期发现问题 原因明确 而不是等到其他操作失败时才发现问题 例如 Python 中的类型错误在实际引发错误之前可能会
  • 关于捕获异常的良好实践

    我正在用 C 11 编写一个小程序 并且第一次真正使用异常 我有一个关于如何有效捕获异常的问题 经过一番谷歌搜索后我仍然没有答案 这是问题 通过 const 左值引用捕获异常还是通过 const 右值引用捕获异常 哪个更有效 或推荐 在代码
  • Leiningen 在哪里安装 clojure 库?

    第一次运行lien 它会安装clojure 但是要安装吗 似乎并不在 图书馆 图书馆 lein clojure jar 和贡献 jar 在 Unix OS X 标题 上是否有固定位置 Leiningen使用maven 或者更准确地说 是实现
  • 服务具有零个应用程序(非基础设施)端点

    我最近创建了一个WCF服务 dll 和一个服务主机 exe 我知道我的 WCF 服务工作正常 因为我能够成功地将服务添加到 WcfTestClient 但是 当我从服务主机 exe 使用 WCF 时 我似乎遇到了问题 我可以将对 WCF d
  • 我应该如何使 Clojure STM 程序持久化?

    我正在编写一个使用 STM 的 clojure 程序 目前 我在启动时从数据库填充 STM 使用引用 然后在 dosync 事务成功时异步更新数据库 我不知道我是否以正确的方式这样做 或者是否有更好的标准技术来做到这一点 谁能向我解释一下他
  • 未捕获 Func<> 的异常(异步)

    我有以下代码 为了进行此重现而进行了简化 显然 catch 异常块将包含更多逻辑 我有以下代码 void Main var result ExecuteAction async gt Will contain real async code
  • JavaFX 抛出 ArrayIndexOutOfBoundsException

    我正在尝试使用 JavaFX 标签和组 通过鼠标拖动将它们移动到屏幕上 新节点从某些线程添加到动画组中 然而 有时我会突然看到以下异常 我假设 当某些节点重叠时 但我不知道问题是什么 因为我的代码不涉及 有谁知道这个异常和根本原因 使用JD
  • 如何将目录添加到 Clojure 的类路径?

    我已使用 Maven 将库安装到 m2 repository 目录中 我想将该路径添加到默认的 Clojure 类路径中 我找不到如何执行此操作的文档 有什么提示吗 Cheers clj Clojure 1 4 0 user gt requ
  • Clojure 为什么命名为 Clojure

    为什么该语言的名称是 Clojure 我用谷歌搜索了一下 在 clojure 中询问 到目前为止 还没有运气 Rich Hickey 他是 Clojure 的设计者 对此的评论是 wiki 上的第一个参考链接 您是否根据以 closure
  • 多少次函数调用会导致堆栈溢出

    你好 Android Java 开发者 当一个函数调用一个函数并且该函数调用另一个函数等等时 有多少次调用 堆栈长度 会让我陷入堆栈溢出 有一般经验法则吗 我问的原因是因为我现在对于我的 5 人纸牌游戏来说哪个更有效 设计明智 解决方案一
  • 排序映射对现有键返回 nil 值

    我尝试从排序映射中按键获取值 并按其返回的值进行比较nil def tmap 1 v 1 2 v 2 3 v 3 def tmap sorted apply sorted map by let val comp compare get in
  • 在哪里可以获得用于导入 libcore.io 的 JAR?

    我想处理一个GaiException在我的应用程序中 调试器告诉我 它位于 libcore io 包中 但导入它会产生错误 我想我需要向我的项目添加一个额外的 JAR 才能正确解析此类型 我在我的 android sdk 文件夹中进行了一些
  • 如何在引发异常时将变量传递给异常并在异常时检索它?

    现在我只有一个空白的异常类 我想知道如何在引发变量时给它一个变量 然后在 try except 中处理它时检索该变量 class ExampleException Exception pass 为其构造函数提供一个参数 将其存储为属性 然后
  • CIL 'fault' 子句与 C# 中的 'catch' 子句有何不同?

    根据CLI标准 http www ecma international org publications files ECMA ST ECMA 335 pdf 第 IIA 部分 第 19 章 和 MSDN 参考页System Reflect

随机推荐

  • Shiny:可以做垂直滑块吗?

    有没有可能在Shiny中制作垂直滑块 我基本上想要一个图 在其左侧有一个垂直滑块 在其下方有一个普通的水平滑块 现在就很容易了noUiSliderInput 来自闪亮小部件 https rdrr io github dreamRs shin
  • 在模态弹出窗口中编辑网格视图而不关闭弹出窗口

    我有一个模式弹出窗口 使用 ModalPopupExtender 在网格的主 详细视图中工作 当您单击一个网格上的按钮时 它会显示一个弹出窗口 其中包含另一个网格的信息 基于在第一个网格中单击的行 这很好用 我已经在弹出的网格中启用了编辑
  • 喷气背包组合中的渐变线颜色

    我想在 jetpack compose 中绘制渐变线 我尝试了一些代码 但它不符合我的预期 预期输出 实际产量 Code Preview showBackground true Composable fun DrawTimeLine Col
  • AngularJS 可与哪些浏览器配合使用?

    这可能是一个最常见的问题 但没有任何关于浏览器版本的线索 而且 角度站点 https docs angularjs org misc faq what browsers does angularjs work with 其本身如下所述 An
  • 在列表视图中添加不同类型的项目

    是否有一个很好的教程或链接显示如何将不同的项目添加到列表视图 例如 一加二文本行 and a 复选框 另一个你只需按下 就会弹出一些东西 我现在所拥有的是每个列表项都是相同的两行文本视图和复选框 Or 如果有办法通过不同的布局一次添加 1
  • -webkit-transform 在 Internet Explorer 中不起作用

    我发现 webkit transform rotateZ 10deg 在 Internet Explorer 9 中不起作用 可以使用什么来代替 CSS3 你有没有尝试过 ms transform rotateZ 10deg As webk
  • 打印图像c#.net

    我在 PictureBox 中有一张图像 我想打印它 无需格式化 无需任何操作 只需打印即可 我一直在谷歌上搜索 但一无所获 只有人们打印表格 文本或报告 private string imgSrc public string ImgSrc
  • jMeter 未将变量应用于标头管理器

    我在 Mac 上使用 Apache JMeter 3 2 r1790748 我有一个setUp Thread Group进行身份验证调用 该调用有效并正确输出令牌 现在我需要将该令牌传递给HTTP Header Manager我拨打的所有电
  • 如何模拟私有 dao 变量?

    我有一个dao create 在测试方法时调用我想要模拟的方法 但我错过了一些东西 因为我仍然得到 NPE 这里有什么问题吗 class MyService Inject private Dao dao public void myMeth
  • 如何关闭特定列的 ag-grid 快速过滤器

    AG grid 有 快速过滤 https www ag grid com javascript grid filter quick 功能 本质上是一个搜索所有列的自由文本搜索过滤器 问题是 在某些列中 我有日期时间值 但我不想搜索这些列中的
  • 在 linq 中选择两列之间的最大值

    我在产品表中有 dateSend 列和 dateEdit 列 我可以使用以下代码选择 max dateSend from pro in Products ToList select new pro DateSend Max 但我在 date
  • PHP 的 var_dump / print_r 输出是乱码 - 编码问题?

    我遇到的问题是服务器上的输出var dump and print r出来完全是乱码 print r输出纯粹的乱码 例如 W 8 等 同时var dump至少给出string 1664 后面是类似的胡言乱语 尽管这次用双引号引起来 这看起来像
  • 聚合广告点击次数和浏览次数

    下表跟踪每个广告系列的点击次数和浏览次数 record id advert id type 1 100 click 2 102 click 3 100 view 4 100 view 5 102 view 6 100 view 7 101
  • 如何在 git 中显示标签的完整历史记录?

    git 中的标签显然可以通过简单地删除它们然后重新标记来从一个提交移动到另一个提交 例如 git tag m Version 1 0 v1 0 abcd123 git push tags git tag d v1 0 git tag m C
  • 在 iOS 中获取蓝牙低功耗外设的 MAC 地址

    我目前正在开发一个基于蓝牙低功耗设备的 iOS 应用程序 为了获得唯一的标识符来比较所获得的外设 我必须获取外设的 MAC 地址 据观察 外围设备的 UUID 属性在不同的 iOS 设备上有所不同 并且外围设备要获得 UUID 它必须至少连
  • Python 3 unicode 编解码器在 tkinter 中绑定鼠标滚轮时出错

    在 MacOS 上使用 Python 3 6 tkinter 我在画布中创建了一个框架并将滚动条绑定到它 这一切都很好 问题是当光标位于可滚动框架中时我尝试捕获 MouseWheel 事件 我设置了一个绑定 main window bind
  • LoadError:不兼容的库版本 - nokogiri

    当我尝试时遇到以下错误 run rake db migrate Log rake aborted LoadError incompatible library version home ubuntu rvm gems ruby 2 3 1
  • 处理 Cassandra 时间戳

    最近我开始研究 cassandra 并且在使用 cql 和 Java 处理 cassandra 时间戳时遇到一些问题 下面是我的示例 cassandra 表架构 CREATE TABLE emp empid int create date
  • 防止 Adblock 阻止跟踪像素

    我目前在一个提供横幅的平台工作 但这些并不是您在每个网站上看到的那些烦人的横幅 它们是交互式横幅 仅当您单击它时才会展开 问题是 adblock 并没有阻止横幅本身 而是阻止了我注入横幅的跟踪像素 为什么我想解决这个问题 好吧 传递那条横幅
  • Clojure 中的自定义异常?

    我一直在尝试在 Clojure 中创建用户定义的异常 但遇到了各种各样的问题 我尝试了这里概述的方法 http en wikibooks org wiki Clojure Programming Concepts User Defined