Josh Benner wrote: > I'm writing a function to create a string that gets longer iff an argument > is defined. In there a more elegant way than nesting all those ifs? > > def format_rsync_src_string(args, server="RSYNC"): > """ Format an rsync source directory string. """ > if args.server is None: > raise CopyNightlyError("No rsync server provided.") > src = "{0}::".format(args.server) > if args.project not None: > src += "{0}/".format(args.project) > if args.version not None: > src += "{0}/".format(args.version) > if args.build not None: > src += "Build {0}".format(args.build) > return src
How about def format_pairs(pairs): for template, value in pairs: if value is None: break yield template.format(value) def format_rsync_src_string(args, server="RSYNC"): """ Format an rsync source directory string. """ if args.server is None: raise CopyNightlyError("No rsync server provided.") return "".join(format_pairs([ ("{0}::", args.server), ("{0}/", args.project), ("{0}/", args.version), ("Build {0}", args.build)])) -- http://mail.python.org/mailman/listinfo/python-list