当我不希望 Clojure 抛出异常时
Clojure throws an exception when I don't expect it to
我有这段代码可以从相扑逻辑和其他服务中获取数据。
core.clj 有这个,它解析参数并 routes
它到 route.clj
中的正确函数
(def cli-options
[
["-a" "--app APPNAME" "set app. app can be:
sumologic or jira"]
["-?" "--help"]
])
(defn -main
[& args]
(let [{:keys [options summary errors arguments]} (parse-opts args cli-options)]
(cond
(:app options) (route/to (:app options) options arguments)
:else (print_usage summary))))
route.clj 有这个:
(defn to
[app options arguments]
(case app
"jira" (jira/respond options arguments)
"sumologic" (sumo/respond)))
然后 sumo.clj 有这个。当然还有其他功能,但只展示相关部分。
(defn get-env-var
[var]
(let [result (System/getenv var)]
(if (nil? result)
(throw (Exception. (str "Environment variable: " var " not set. Aborting")))
result)))
(def access_key
(let [user (get-env-var "SUMO_ID")
pass (get-env-var "SUMO_KEY")]
[user pass]))
(defn respond
[]
(let [{:keys [status body error] :as response} (http/get endpoint rest-options)]
(if error
(println error)
(print-response body))))
当我 运行 程序使用 leiningen 作为 lein run -- -?
或什至只是 lein run
时,我得到这个错误,即使我没有明确调用 sumologic 函数。我做错了什么,我可以做哪些不同的事情?
Caused by: java.lang.Exception: Environment variable: SUMO_KEY not set. Aborting
at clarion.sumo$get_env_var.invoke(sumo.clj:14)
at clarion.sumo$fn__3765.invoke(sumo.clj:19)
at clojure.lang.AFn.applyToHelper(AFn.java:152)
at clojure.lang.AFn.applyTo(AFn.java:144)
at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3553)
您已经 def
了 access_key
,因此在您加载应用程序时会对其进行评估。您可能想让它成为一个函数。
我有这段代码可以从相扑逻辑和其他服务中获取数据。
core.clj 有这个,它解析参数并 routes
它到 route.clj
(def cli-options
[
["-a" "--app APPNAME" "set app. app can be:
sumologic or jira"]
["-?" "--help"]
])
(defn -main
[& args]
(let [{:keys [options summary errors arguments]} (parse-opts args cli-options)]
(cond
(:app options) (route/to (:app options) options arguments)
:else (print_usage summary))))
route.clj 有这个:
(defn to
[app options arguments]
(case app
"jira" (jira/respond options arguments)
"sumologic" (sumo/respond)))
然后 sumo.clj 有这个。当然还有其他功能,但只展示相关部分。
(defn get-env-var
[var]
(let [result (System/getenv var)]
(if (nil? result)
(throw (Exception. (str "Environment variable: " var " not set. Aborting")))
result)))
(def access_key
(let [user (get-env-var "SUMO_ID")
pass (get-env-var "SUMO_KEY")]
[user pass]))
(defn respond
[]
(let [{:keys [status body error] :as response} (http/get endpoint rest-options)]
(if error
(println error)
(print-response body))))
当我 运行 程序使用 leiningen 作为 lein run -- -?
或什至只是 lein run
时,我得到这个错误,即使我没有明确调用 sumologic 函数。我做错了什么,我可以做哪些不同的事情?
Caused by: java.lang.Exception: Environment variable: SUMO_KEY not set. Aborting
at clarion.sumo$get_env_var.invoke(sumo.clj:14)
at clarion.sumo$fn__3765.invoke(sumo.clj:19)
at clojure.lang.AFn.applyToHelper(AFn.java:152)
at clojure.lang.AFn.applyTo(AFn.java:144)
at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3553)
您已经 def
了 access_key
,因此在您加载应用程序时会对其进行评估。您可能想让它成为一个函数。