On 06/10/2010 00:17, Ethan Furman wrote:
> On one the many mini-reports we use, we have a bunch of counts that
> are frequently zero; because the other counts can also be low, it
> becomes easy to miss the non-zero counts.  For example:
>
> Code  Description
>
>       Conv Errors              :       6
>
> 31,N  DPV Failure              :       4
> 10:   Invalid Address          :       0
> 11:   Invalid C/S/Z            :       0
> 12:   Invalid State            :       0
> 13:   Invalid City             :       0
> 17:   Insufficient Information :       0
> 33:   Non-Deliverable          :       0
> 98:   Non-USPS zip             :       0
>
> 21:   Address Not Found        :       0
> 22:   Multiple Responses       :       3
> 23:   Error in Primary         :       0
> 24:   Error in Secondary       :       0
>
>
> So I thought I would print '-' instead...
>
> Code  Description
>
>       Conv Errors              :       6
>
> 31,N  DPV Failure              :       4
> 10:   Invalid Address          :       -
> 11:   Invalid C/S/Z            :       -
> 12:   Invalid State            :       -
> 13:   Invalid City             :       -
> 17:   Insufficient Information :       -
> 33:   Non-Deliverable          :       -
> 98:   Non-USPS zip             :       -
>
> 21:   Address Not Found        :       -
> 22:   Multiple Responses       :       3
> 23:   Error in Primary         :       -
> 24:   Error in Secondary       :       -
>
>
> Much easier to pick out the numbers now.  To support this, the code
> changed slightly -- it went from
>
> '%-25s: %7d' % ('DPV Failure', counts['D'])
>
> to
>
> '%-25s: %7s' % ('DPV Failure', counts['D'] if counts['D'] else '-'))
>
> This became a pain after a dozen lines, prompting my previous
> question about the difference between %s and %d when printing
> integers.  With the excellent replies I received I coded a short
> class:
>
> [snip]
> Any comments appreciated, especially ideas on how to better handle
> class- and staticmethods
>
I think that's a bit of overkill. The problem lies in the printing
part, but you're spreading the solution into the rest of the
application! (A case of the tail wagging the dog, perhaps? :-))

IMHO you should just use a simple function when printing:

def dash_zero(x):
    return str(x) if x else '-'

...

'%-25s: %7s' % ('DPV Failure', dash_zero(counts['D']))
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to