On Fri, Dec 5, 2014 at 7:38 AM, kcrisman <kcris...@gmail.com> wrote: > Hmm, this is a fairly old function, if I recall correctly, implemented > relatively early on. There may be some discussion from where it was > upgraded at http://trac.sagemath.org/ticket/16308 or > http://trac.sagemath.org/ticket/16374 (I cannot find the original ticket, > which surprises me). > > So if you are interested in doing this, I would recommend opening a ticket > and cc:ing the people involved on those tickets. I feel like your question > is good, though one could certainly say this is a ValueError like dividing > by zero.
I certainly think the design as it is now is extremely consistent with the rest of Sage and with standard Python programming practices. There are certainly other programming languages and libraries where exceptions are not commonly used, and where it is common for functions to return arbitrary made-up (hopefully documented) values to indicate errors. That's just not the convention at all in Python. Just a technical point. When you say "The output is an error message." that is not really technically correct (at least if I replace "output" by "returns"). The function doesn't return anything; instead it raises an exception during execution. Here's a function you can use to convert functions in Sage to ones that have the property you want: def no_except(f, err): def g(*args, **kwds): try: return f(*args, **kwds) except: return err return g # Then: f = no_except(two_squares, []) for k in xrange(10): print f(3437458237428-k), 3437458237428-k # outputs: [] 3437458237428 [] 3437458237427 (519651, 1779725) 3437458237426 [] 3437458237425 [] 3437458237424 [] 3437458237423 [] 3437458237422 [] 3437458237421 [] 3437458237420 [] 3437458237419 See [1] -- William [1] https://cloud.sagemath.com/projects/4a5f0542-5873-4eed-a85c-a18c706e8bcd/files/support/2014-12-05%20two%20squares.sagews > > > On Friday, December 5, 2014 9:52:20 AM UTC-5, Rolandb wrote: >> >> Hi, please look at the following example. >> >> sage: print two_squares(3437458237428) >> Traceback (most recent call last): >> ... >> ValueError: 3437458237428 is not a sum of 2 squares >> >> >> The ouput is an error message. Thus if I want to test several cases, I >> have to check each case like: >> >> sage: for k in xrange(10): >> ... try: >> ... print two_squares(3437458237428-k), 3437458237428-k >> ... except: >> ... pass >> (519651, 1779725) 3437458237426 >> >> >> Why is the output not someting like []? >> >> This seems (to me) more natural, and as Python skips automatically an >> empty list, programming is easier, lines are shorter and more readable IMHO. >> It is also faster. >> >> My question is whether there are good reasons to raise a valueError >> message as output? >> >> Roland > > -- > You received this message because you are subscribed to the Google Groups > "sage-support" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to sage-support+unsubscr...@googlegroups.com. > To post to this group, send email to sage-support@googlegroups.com. > Visit this group at http://groups.google.com/group/sage-support. > For more options, visit https://groups.google.com/d/optout. -- William Stein Professor of Mathematics University of Washington http://wstein.org -- You received this message because you are subscribed to the Google Groups "sage-support" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-support+unsubscr...@googlegroups.com. To post to this group, send email to sage-support@googlegroups.com. Visit this group at http://groups.google.com/group/sage-support. For more options, visit https://groups.google.com/d/optout.