Поймать пользовательское исключение в Clojure - PullRequest
0 голосов
/ 11 октября 2011

В библиотеке 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. Я хотел бы поймать пользовательское исключение и позволить другим скользить, поэтому я буду признателен за вашу помощь.

Спасибо, Кевин

1 Ответ

4 голосов
/ 11 октября 2011

Как и PhoneNumberUtil, вам нужно либо import NumberParseException к пространству имен, либо предоставить его полный квалифицированный пакет в выражении catch.

Если исключение является внутренним классом, который в ближайшем будущем преобразуется в OuterClass $ InnerClass (который вам все еще нужно либо импортировать, либо соответствовать его пакету).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...