Lisp mentality vs. Python mentality
Ciprian Dorin, Craciun
ciprian.craciun at gmail.com
Sat Apr 25 15:11:35 CEST 2009
On Sat, Apr 25, 2009 at 4:01 PM, "Martin v. Löwis" <martin at v.loewis.de> wrote:
>> Indeed the example I've given is purely theoretical. But still, I
>> could find a use case for such a thing: just imagine we are building a
>> small shell-like application that reads one line (the commands),
>> splits it by spaces and always expects to have 4 elements and that
>> each respects a given regular expression, one specific for each index.
>> In this case I could syntactically check for correctness by doing
>> compare (regular_expressions, splitted_line, re.match)
>> Of course I could have just created a big regular expression for
>> the entire line. But maybe my 4 elements come from variables obtained
>> from a web-server query, or the regular expressions are not static but
>> dynamically generated at run-time.
> Ok, in this case I would write a function:
> def validate_commandline(rexes, line):
> if len(rexes) != len(line):
> raise ValueError("Incorrect number of arguments, expected %d,"
> "got %d" % (len(rexes), len(line)))
> for i in range(len(line)):
> if not re.match(rexes[i], line[i]):
> raise ValueError, "Incorrect argument %d" % i
> IOW, in this specific case, I would not only want a true/false result,
> but also an indication of the actual error to report to the user.
> Your universal compare function would be no good here.
Well in fact I would have written it like:
def validate_commandline(rexes, line) :
if not compare (rexes, line, re.match) :
if len (rexes) != len (line) :
raise ValueError ("mismatch len")
mismatch = find_index (rexes, line, re.match, negate = True)
raise ValueError ("mismatch at %d" % (mismatch))
Assuming, that I would have the function find_index.
More information about the Python-list