How to make this simple code look better

Tim Chase python.list at tim.thechases.com
Tue Oct 27 08:08:53 EDT 2015


On 2015-10-27 17:24, Ganesh Pal wrote:
> from myPopen import run
> 
> def configure_network():
>     """
>     Prepare network for test
>     """
>     try:
>         cmd = ("netadm enable -p ncp DefaultFixed")
>         out, err, ret = run(cmd, timeout=60)
>         if ret != "":
>             logging.error("Can't run %s got %s (%d)!" % (cmd, err,
> ret)) return False
>         cmd = ("ipadm create-ip net3")
>         out, err, ret = run(cmd, timeout=60)
>         if ret != "":
>             logging.error("Can't run %s got %s (%d)!" % (cmd, err,
> ret)) return False
>         cmd = ("ipadm create-addr -a 192.168.84.3/24 net3")
>         out, err, ret = run(cmd, timeout=60)
>         if ret != "":
>             logging.error("Can't run %s got %s (%d)!" % (cmd, err,
> ret)) return False
>         cmd = (" route -p add default 192.168.84.1")
>         out, err, ret = run(cmd, timeout=60)
>         if ret != "":
>             logging.error("Can't run %s got %s (%d)!" % (cmd, err,
> ret)) return False
>     except Exception, e:
>         logging.exception("Failed to run %s got %s" % (cmd, e))
>         return False
>     logging.info("Configuring network .Done !!!")
>     return True
> 
> 
> Q1.How to make this code look better (in terms of quality)

I'd be tempted

1) to put it in a loop
2) just test the "ret" string directly instead of comparing it to
   the empty string
3) to do your exception testing on each command rather than wrapping
   the entire loop

  for cmd in [
      "netadm enable -p ncp DefaultFixed",
      "ipadm create-ip net3",
      "ipadm create-addr -a 192.168.84.3/24 net3",
      "route -p add default 192.168.84.1",    
      ]:
    try:
      out, err, ret = run(cmd, timeout=60)
      if ret:
        logging.exception("Can't run %s got %s (d)!", cmd, err, ret)
        return False
    except Exception, e:
      logging.exception("Failed to run %s", cmd)
      return False
  logging.info("Configuring network done.")
  return True

It reduces the redundant code and also brings all of the commands
together in one place to see the expected steps.

> Q2. Iam using the except clause, just to maintain the syntax,  will
> any exception be caught in this case.

All regular exceptions will be caught.  I think certain errors (rather
than exceptions) may still behave properly.

-tkc






More information about the Python-list mailing list