在libphonenumber库中,PhoneNumberUtil.parse
函数会抛出NumberParseException
。我想优雅地处理这个异常。
我正在运行以下一次性脚本(使用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
错误。我想抓住自定义异常并让其他人滑动,所以我很感激你的帮助。
谢谢,凯文
答案 0 :(得分:4)
就像PhoneNumberUtil
一样,您需要import
命名空间的NumberParseException
或在catch表达式中提供其完全限定的包。
如果异常是内部类,则将clojure转换为OuterClass $ InnerClass(您仍然需要导入或限定其包)。