在Clojure中捕获自定义异常

时间:2011-10-11 16:14:35

标签: exception-handling clojure

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 NumberParseExceptioncatch PhoneNumberUtil/NumberParseExceptioncatch (.NumberParseException phoneUtil)的任意组合都会出现Unable to resolve classname错误。我想抓住自定义异常并让其他人滑动,所以我很感激你的帮助。

谢谢,凯文

1 个答案:

答案 0 :(得分:4)

就像PhoneNumberUtil一样,您需要import命名空间的NumberParseException或在catch表达式中提供其完全限定的包。

如果异常是内部类,则将clojure转换为OuterClass $ InnerClass(您仍然需要导入或限定其包)。

相关问题