Python Forum
Overcoming ZeroDivisionError: division by zero Error
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Overcoming ZeroDivisionError: division by zero Error
#1
In the data set I have 5 such lists (all zero values).

Is there a way I can eliminate this error in such cases? I could simply remove the lists, but don't want to alter the true result.

from ast import literal_eval
 
with open("C:\Dave\data.txt") as f :
    for line in f :
        name, values = line.split(' = ')
        values = literal_eval(values)

print(f" District: {name}")

print(f"Hal received {values[3]} votes AVG: -  {values[3]/sum(values):.2%}).")
District: p3635
Traceback (most recent call last):
File "C:/Python37-32/read.py", line 34, in <module>
print(f"Robert received {values[3]} votes AVG: - {values[3]/sum(values):.2%}).")
ZeroDivisionError: division by zero

The data file is (fails when it hits p3635):

p3624 = [454, 434, 175, 178, 82, 92, 6]
p3635 = [0, 0, 0, 0, 0, 0, 0]
Reply
#2
Use a try...except block to provide alternative code when the error arises.

from ast import literal_eval
  
with open("C:\Dave\data.txt") as f :
    for line in f :
        name, values = line.split(' = ')
        values = literal_eval(values)
 
print(f" District: {name}")

try: 
    print(f"Hal received {values[3]} votes AVG: -  {values[3]/sum(values):.2%}).")
except ZeroDivisionError:
    ...
Reply
#3
note that this will print info only for last line. You need to print inside the for loop
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#4
Hmm, still receive ZeroDivisionError: division by zero, trying the following:

from ast import literal_eval

with open("C:\Dave\data.txt") as f :
    for line in f :
        name, values = line.split(' = ')
        values = literal_eval(values)

        print(f" District: {name}")
        print(f"Hal received {values[3]} votes AVG: -  {values[3] / sum(values):.2%}).")

try :
    print(f"Hal received {values[3]}")
except ZeroDivisionError :
    ...
Traceback (most recent call last):
File "C:/Python37-32/read1.py", line 9, in <module>
print(f"Hal received {values[3]} votes AVG: - {values[3] / sum(values):.2%}).")
ZeroDivisionError: division by zero

I think I am having trouble including the for loop in the code above when division by zero occurs:

#this works
try:
    (print (1/0))
except ZeroDivisionError:
    print ("You can't divide by zero, you're silly.")
Reply
#5
try:
    with open("C:\Dave\data.txt") as f :
        for line in f :
            name, values = line.split(' = ')
            values = literal_eval(values)
 
            print(f" District: {name}")
            print(f"Hal received {values[3]} votes AVG: -  {values[3] / sum(values):.2%}).")
except ZeroDivisionError as error:
    print(f'Can\'t divide this: {error}')
I welcome all feedback.
The only dumb question, is one that doesn't get asked.
My Github
How to post code using bbtags


Reply
#6
To handle the issue, the operation that might throw the exception must happen in the try: block.

In your second example, that's exactly what is shown. There's only one line in the try block, and it's an explicit division by zero. So the except block is entered.

In your first example, the division by zero potentially happens in line 9 (since that's where the division occurs), not line 12 which prints the answer. By then, it's too late.
Reply
#7
#! /usr/bin/env python3
from ast import literal_eval

with open('test.txt') as file:
    for line in file:
        name, values = line.split('=')
        values = literal_eval(values)
        if sum(values) == 0:
            pass
        else:
            print(f'District: {name}')
            print(f'Hal received {values[3]} votes AVG: - {values[3]/sum(values):.2%}.')
test.txt
Output:
p3624=[454, 434, 175, 178, 82, 92, 6] p3635=[0, 0, 0, 0, 0, 0, 0] p3628=[45, 44, 175, 178, 82, 92, 6]
Output:
District: p3624 Hal received 178 votes AVG: - 12.53%. District: p3628 Hal received 178 votes AVG: - 28.62%.
I welcome all feedback.
The only dumb question, is one that doesn't get asked.
My Github
How to post code using bbtags


Reply
#8
(Jun-11-2020, 09:02 PM)dgrunwal Wrote: Hmm, still receive ZeroDivisionError: division by zero, trying the following:

Look at @stullis' example and how it differ from your code:

from ast import literal_eval
   
with open("C:\Dave\data.txt") as f :
    for line in f :
        name, values = line.split(' = ')
        values = literal_eval(values)
  
        print(f" District: {name}")
 
        try: 
            print(f"Hal received {values[3]} votes AVG: -  {values[3]/sum(values):.2%}).")
        except ZeroDivisionError:
            print('There are only zeros in values.'
Note, I don't think values[3]/sum(values) would produce average value, if that is what you calculate AVG
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#9
Thank you guys for looking, code working now. Much appreciation,
Dave
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  I try to import Vpython and I get a "ZeroDivisionError" Jon2222 16 2,465 Jul-26-2023, 07:37 AM
Last Post: Jon2222
  Division questions Dionysis 5 990 Feb-14-2023, 02:02 PM
Last Post: Dionysis
  Division by zero and value of argument Lawu 5 2,966 Jul-01-2022, 02:28 PM
Last Post: Lawu
  Floor division problem with plotting x-axis tick labels Mark17 5 2,047 Apr-03-2022, 01:48 PM
Last Post: Mark17
  Division calcuation with answers to 1decimal place. sik 3 2,091 Jul-15-2021, 08:15 AM
Last Post: DeaD_EyE
  Floor division return value Chirumer 8 3,695 Nov-26-2020, 02:34 PM
Last Post: DeaD_EyE
  Integer division plozaq 2 1,938 Sep-28-2020, 05:49 PM
Last Post: plozaq
  Division of an integer into sub-numbers Richard_SS 4 2,883 Jun-14-2019, 11:47 AM
Last Post: DeaD_EyE
  ZeroDivisionError CIVILmath 2 2,456 Jan-17-2019, 02:38 AM
Last Post: CIVILmath
  Logic of using floor division and modulus for a different variable at different time SB_J 2 2,460 Nov-01-2018, 07:25 PM
Last Post: SB_J

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020