Thanks for the advice. I will keep it in mind.

Luca


Il giorno mercoledì 14 febbraio 2018 20:05:32 UTC+1, Erik Assum ha scritto:
>
> There is also https://github.com/magnars/realize/blob/master/README.md which 
> helps with this problem. 
>
> Erik. 
> -- 
> i farta
>
> 14. feb. 2018 kl. 12:20 skrev Thomas Heller <th.h...@gmail.com 
> <javascript:>>:
>
> lazy-seq is the short answer.
>
> You are constructing the seq inside the try/catch but it is realized 
> outside of that so no exceptions will be caught.
>
> (defn gen-ym-list [from to]
>   (try
>     (->> (p/periodic-seq (f/parse ym-fmt from) (t/months 1))
>          (take-while #(not (t/after? % (f/parse ym-fmt to))))
>          (into [])
>     (catch Exception _ nil)))
>
> This forces the seq inside the try/catch.
>
> HTH,
> Thomas
>
> On Wednesday, February 14, 2018 at 11:46:58 AM UTC+1, icamts wrote:
>>
>> Hi all,
>> I found an unexpected behavior of (try ... (catch ...)) special form. 
>> Can someone help me understand it better?
>>
>> These are project.clj and core.clj of my test project. The test project 
>> zip file is provided as an attachment.
>>
>> (defproject try-try "0.0.0"
>>   :description "unexpected try beahvior"
>>   :url "http://example.com/FIXME";
>>   :license {:name "Eclipse Public License"
>>             :url "http://www.eclipse.org/legal/epl-v10.html"}
>>   :dependencies [[org.clojure/clojure "1.8.0"]
>>                  [org.clojure/tools.cli "0.3.5"]
>>                  [clj-time "0.14.0"]
>>                  [joda-time/joda-time "2.9.7"]])
>>
>> (ns try-try.core
>>   (:require [clj-time.core :as t]
>>             [clj-time.format :as f]
>>             [clj-time.periodic :as p]))
>>
>> (def ym-fmt (f/formatter "yyyyMM"))
>>
>> (defn gen-ym-list [from to]
>>   (try
>>     (->> (p/periodic-seq (f/parse ym-fmt from) (t/months 1))
>>          (take-while #(not (t/after? % (f/parse ym-fmt to)))))
>>     (catch Exception _ nil)))
>>
>> (defn gen-ym-list* [from to]
>>   (try
>>    (let [ym-from (f/parse ym-fmt from)
>>          ym-to (f/parse ym-fmt to)]
>>      (->> (p/periodic-seq ym-from (t/months 1))
>>           (take-while #(not (t/after? % ym-to)))))
>>    (catch Exception _ nil)))
>>
>> (gen-ym-list "2017" "201802"); returns nil as expected
>>
>> (gen-ym-list "201712" "2018"); throws unexpected exception
>>
>> (gen-ym-list* "2017" "201802"); returns nil as expected
>>
>> (gen-ym-list* "201712" "2018"); returns nil as expected
>>
>> (use 'clojure.walk)
>>
>> (macroexpand-all
>>  `(try
>>     (->> (p/periodic-seq (f/parse ym-fmt from) (t/months 1))
>>          (take-while #(not (t/after? % (f/parse ym-fmt to)))))
>>     (catch Exception _ nil)))
>>
>> (macroexpand-all
>>  `(try
>>     (let [date-from (f/parse ym-fmt from)
>>           date-to (f/parse ym-fmt to)]
>>       (->> (p/periodic-seq date-from (t/months 1))
>>            (take-while #(not (t/after? % date-to)))))
>>     (catch Exception _ nil)))
>>
>> gen-ym-list doesn't catch IllegalArgumentException thrown when to 
>> argument is malformed. It catches the same exception thrown when from is 
>> malformed.
>>
>> gen-ym-list* with arguments parsing in an initial let form works as 
>> expected.
>>
>> From macro expansion I can see the to is parsed inside a fn*. Is this a 
>> known limit in try-catch special form? Or a bug? Thanks in advance for your 
>> help.
>>
>> Cheers,
>> Luca
>>
>>
>> -- 
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clo...@googlegroups.com <javascript:>
> Note that posts from new members are moderated - please be patient with 
> your first post.
> To unsubscribe from this group, send email to
> clojure+u...@googlegroups.com <javascript:>
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> --- 
> You received this message because you are subscribed to the Google Groups 
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to clojure+u...@googlegroups.com <javascript:>.
> For more options, visit https://groups.google.com/d/optout.
>
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to