在libphonenumber库中,PhoneNumberUtil.parse
函数抛出NumberParseException
。我想优雅地处理这个异常。在Clojure中捕获自定义异常
我跑以下一次性脚本(使用java -cp path/to/clojure.jar:path/to/libphonenumber.jar clojure.main -i scratch.clj
调用):
(import '(com.google.i18n.phonenumbers PhoneNumberUtil))
(defn parse-phone-no
"Convert the phone number to standard form, using the libphonenumber class.
Arguments:
raw-phone-no - the phone number to convert
Returns:
the canonical version of the phone number, or nil if the phone number was
invalid."
[raw-phone-no]
(do
(def phone-util (PhoneNumberUtil/getInstance))
(try
(do
(def us-number (.parse phone-util raw-phone-no "US"))
(.getNationalNumber us-number))
(catch NumberParseException e
nil))))
(println (parse-phone-no "5"))
如果我有一个通用的catch Exception
运行它,然后它工作正常,但是任何的catch NumberParseException
,catch PhoneNumberUtil/NumberParseException
和catch (.NumberParseException phoneUtil)
组合给出Unable to resolve classname
错误。我想赶上自定义异常并让其他人滑动,所以我会很感激您的帮助。
谢谢,凯文
你也应该考虑用'let'而不是'def'来创建局部变量(在这种情况下,“考虑”的意思是:“绝对做到这一点,但如果你仍然在学习Clojure,你可以暂时搁置一段时间“)。令人惊讶的是,我现在找不到一个SO问题来联系你:抱歉。 – amalloy
也许问一个问题并自己回答?因为是的,我知道我的语法真的很糟糕。 –