Altered program, ZeroDivisionError

71 views Asked by At

I have altered a program to allow for rounding to 2dps but despite having successfully eliminating it prior "ZeroDivisionError: float division" has returned. What alterations do I need to make to avoid the error using the most elegant method?

Was:

for line in data:
  split=line.split()
  ptot=0
  ntot=0
  for pchar in "HKR":
    pchartotal=split[1].count(pchar)
    ptot+=pchartotal
  for nchar in "DE":
    nchartotal=split[1].count(nchar)
    ntot+=nchartotal
  try:
    print float(ptot)/float(ntot)
  except ZeroDivisionError:
    print ptot

Is:

for line in data:
  split=line.split()
  ptot=0
  ntot=0
  for pchar in "HKR":
    pchartotal=split[1].count(pchar)
    ptot+=pchartotal
  for nchar in "DE":
    nchartotal=split[1].count(nchar)
    ntot+=nchartotal
  ratio=float(ptot)/float(ntot)
  try:
    print "%.2f" % ratio
  except ZeroDivisionError:
    print ptot
1

There are 1 answers

0
furkle On BEST ANSWER

It looks like the reason this is happening is that your ratio assignment (dividing ptot and ntot) isn't contained within your try/except block. You're not doing any division in the try block - why would a ZeroDivisionError be caught?

If you were to change it to this:

ratio = 0
try:
    ratio = float(ptot) / float(ntot)
    print "%.2f" % ratio
except ZeroDivisionError:
    print ptot

this should remedy your error.