Задача — построить график функции sin(2*3.14*i/50)/cos(2*3.14*i/50) на Python
while i<=50:
y=math.sin(2*3.14*i/50)/math.cos(2*3.14*i/50)
if(y>max):
max=y
elif(y<min):
min=y
i+=1
print('n')
j=1
while j<=50:
y= math.ceil(((math.sin(2*3.14*i/50)/math.cos(2*3.14*i/50))-min)*50/(max-min))
if y==50-j:
print('*')
else:
print (' ')
j+=1
print(max)
print(min)
При запуске выходит ошибка:
ZeroDivisionError: float division by zero.
Проверял — значения максимума и минимума присваиваются верно, значит беда во внутреннем цикле. Зафэйлил с пробелами, или же в Python так вообще делать нельзя?
Обновление
Изначально:
import math
min=max=math.sin(2*3.14/50)/math.cos(2*3.14/50)
i=1
Значения max = 15.7029740933..., min = -16.53312943.... Отсчет i начинается с 1, изначально max = min, а затем присваиваем значения.
Вывел min и max перед ошибкой. Оба значения 0.126264… Хотя если убрать внутренний цикл — все нормально. По идее должно 50 раз вывести на экран значения max и min (15.703… и -16.533).
By Lenin Mishra
in
python
—
Jan 15, 2022
Handling Zero Division exceptions in Python

A ZeroDivisionError is raised when you try to divide by 0. This is part of the ArithmeticError Exception class.
Example 1
Code/Output
# integers
1/0
>>> ZeroDivisionError: division by zero
# floats
5.3/0
>>> ZeroDivisionError: float division by zero
# complex numbers
(1+2j)/0
>>> ZeroDivisionError: complex division by zero
Example 2 — decimal library
If you are working with a decimal library and you perform the division operation with a 0, you get a DivisionByZero error.
The DivisionByZero eexception is decimal libraries own exception type that derives from the ZeroDivisionError exception.
Code
from decimal import Decimal
x = Decimal(1)
print(x/0)
Output
decimal.DivisionByZero: [<class 'decimal.DivisionByZero'>]
Handling ZeroDivisionError in Python
You can handle ZeroDivisionError errors by using the same exception class in your except block.
Code
# integers
try:
1/0
except ZeroDivisionError as e:
print(e)
# floats
try:
5.3/0
except ZeroDivisionError as e:
print(e)
# complex numbers
try:
(1+2j)/0
except ZeroDivisionError as e:
print(e)
Output
division by zero
float division by zero
complex division by zero
Hierarchy of ZeroDivisionError
The ZeroDivisionError inherits from the ArithmeticError class, which in turn inherits from the generic Exception class.
->Exception
-->ArithmeticError
--->ZeroDivisionError
So you can catch all ZeroDivisionError exceptions using the ArithmeticError exception class too.
Code
# integers
try:
1/0
except ArithmeticError as e:
print(e, e.__class__)
# floats
try:
5.3/0
except ArithmeticError as e:
print(e, e.__class__)
# complex numbers
try:
(1+2j)/0
except ArithmeticError as e:
print(e, e.__class__)
Output
division by zero <class 'ZeroDivisionError'>
float division by zero <class 'ZeroDivisionError'>
complex division by zero <class 'ZeroDivisionError'>
Check out other Python Built-in Exception classes in Python.
Исключения (Exceptions) Python
Исключения (exceptions) — ещё один тип данных в python. Исключения необходимы для того, чтобы сообщать программисту об ошибках.
Самый простой пример исключения — деление на ноль. Если попробовать запустить такую программу
z = 100 / 0
она завершится с ошибкой
Traceback (most recent call last):
File "", line 1, in
ZeroDivisionError: division by zero
ZeroDivisionError — это название исключения, а division by zero — его краткое описание. Также Python сообщит
номер строки, где это исключение возникло.
Разумеется, возможны и другие исключения. Например, при попытке сложить строку и число
z = 2 + '1'
произойдет
исключение TypeError
Traceback (most recent call last):
File "", line 1, in
TypeError: unsupported operand type(s) for +: 'int' and 'str'
В этом примере генерируется исключение TypeError. Подсказки дают нам полную информацию о том, где порождено исключение, и с чем оно связано.
Рассмотрим иерархию встроенных в python исключений, хотя иногда вам могут встретиться и другие, так как программисты могут создавать собственные исключения.
-
BaseException — базовое исключение, от которого берут начало все остальные.
- SystemExit — исключение, порождаемое функцией sys.exit при выходе из программы.
- KeyboardInterrupt — порождается при прерывании программы пользователем (обычно сочетанием клавиш Ctrl+C).
- GeneratorExit — порождается при вызове метода close объекта generator.
- Exception — а вот тут уже заканчиваются полностью системные исключения (их лучше не трогать) и начинаются обыкновенные, с которыми можно работать.
- StopIteration — порождается встроенной функцией next, если в итераторе больше нет элементов.
- ArithmeticError — арифметическая ошибка.
- FloatingPointError — порождается при неудачном выполнении операции с плавающей запятой. На практике встречается нечасто.
- OverflowError — возникает, когда результат арифметической операции слишком велик для представления. Не появляется при обычной работе с целыми числами (так как python поддерживает длинные числа), но может возникать в некоторых других случаях.
- ZeroDivisionError — деление на ноль.
- AssertionError — выражение в функции assert ложно.
- AttributeError — объект не имеет данного атрибута (значения или метода).
- BufferError — операция, связанная с буфером, не может быть выполнена.
- EOFError — функция наткнулась на конец файла и не смогла прочитать то, что хотела.
- ImportError — не удалось импортирование модуля или его атрибута.
- LookupError — некорректный индекс или ключ.
- IndexError — индекс не входит в диапазон элементов.
- KeyError — несуществующий ключ (в словаре, множестве или другом объекте).
- MemoryError — недостаточно памяти.
- NameError — не найдено переменной с таким именем.
- UnboundLocalError — сделана ссылка на локальную переменную в функции, но переменная не определена ранее.
- OSError — ошибка, связанная с системой.
- BlockingIOError
- ChildProcessError — неудача при операции с дочерним процессом.
- ConnectionError — базовый класс для исключений, связанных с подключениями.
- BrokenPipeError
- ConnectionAbortedError
- ConnectionRefusedError
- ConnectionResetError
- FileExistsError — попытка создания файла или директории, которая уже существует.
- FileNotFoundError — файл или директория не существует.
- InterruptedError — системный вызов прерван входящим сигналом.
- IsADirectoryError — ожидался файл, но это директория.
- NotADirectoryError — ожидалась директория, но это файл.
- PermissionError — не хватает прав доступа.
- ProcessLookupError — указанного процесса не существует.
- TimeoutError — закончилось время ожидания.
- ReferenceError — попытка доступа к атрибуту со слабой ссылкой.
- RuntimeError — возникает, когда исключение не попадает ни под одну из других категорий.
- NotImplementedError — возникает, когда абстрактные методы класса требуют переопределения в дочерних классах.
- SyntaxError — синтаксическая ошибка.
- IndentationError — неправильные отступы.
- TabError — смешивание в отступах табуляции и пробелов.
- IndentationError — неправильные отступы.
- SystemError — внутренняя ошибка.
- TypeError — операция применена к объекту несоответствующего типа.
- ValueError — функция получает аргумент правильного типа, но некорректного значения.
- UnicodeError — ошибка, связанная с кодированием / раскодированием unicode в строках.
- UnicodeEncodeError — исключение, связанное с кодированием unicode.
- UnicodeDecodeError — исключение, связанное с декодированием unicode.
- UnicodeTranslateError — исключение, связанное с переводом unicode.
-
Warning — Базовый класс для исключений-предупреждений.
Данное семейство исключений представляет собой различные категории предупреждений.- BYTESWARNING — Предупреждения, связанные с возможными проблемами при работе с байтами.
Данная категория предупреждений используется в случаях возможных ошибок при работе с бйтами (bytes и bytearray). - DeprecationWarning — Категория предупреждений о функциональности нежелательной к использованию.
Эту категорию обычно используют для указания на то, что некая часть функциональности морально устарела (возможно ей на смену пришла более совершенная) и не рекомендуется к использованию. - FUTUREWARNING — Категория, описывающая предупреждения об изменениях в будущем.
Предупреждения данной категории призваны оповещать о грядущих [семантических] изменениях.
Пример предупреждения о грядущих изменениях изnumpy:
FutureWarning: comparison to ‘None‘ will result in an elementwiseobjectcomparison in the future. - IMPORTWARNING — предупреждение о вероятной ошибке при импорте модуля.
Предупреждения данной категории могут использоваться, например, в случаях внесения изменений в систему импорта при помощи перехватчиков (хуков). - PendingDeprecationWarning — Категория предупреждений о функциональности, которая вскоре должна стать нежелательной к использованию.
- ResourceWarning — Предупреждения, связанные с возможными проблемами при работе с ресурсами.
Примером использования данной категории предупреждений можут служить указание на необходимость закрытия сокета, что необходимо для высвобождения ресурсов. - RuntimeWarning — Предупреждение о сомнительном поведении во время исполнения.
Категория может быть использована для обозначения сомнительного поведения приложения, например, если код выявил вероятные погрешности в вычислениях. - SyntaxWarning — Предупреждение об использовании сомнительных синтаксических конструкций.
Категория используется в случаях, когда замечены вероятные синтаксические ошибки. - UnicodeWarning — Предупреждения, связанные с возможными проблемами при работе с Юникод.
- USERWARNING — Класс для пользовательских предупреждений.
Может использоваться пользователями в качестве базового класса для создания собственных иерархий предупреждений.
- BYTESWARNING — Предупреждения, связанные с возможными проблемами при работе с байтами.
Теперь, зная, когда и при каких обстоятельствах могут возникнуть исключения, мы можем их обрабатывать. Для обработки исключений используется конструкция try — except.
Первый пример применения этой конструкции:
try:
k = 1 / 0
except ZeroDivisionError:
k = 0
print(k)
0
В блоке try мы выполняем инструкцию, которая может породить исключение, а в блоке except мы перехватываем их. При этом перехватываются как само исключение, так и его потомки. Например, перехватывая ArithmeticError, мы также перехватываем FloatingPointError, OverflowError и ZeroDivisionError.
try:
k = 1 / 0
except ArithmeticError:
k = 0
print(k)
0
Также возможна инструкция except без аргументов, которая перехватывает вообще всё (и прерывание с клавиатуры, и системный выход и т. д.). Поэтому в такой форме инструкция except практически не используется, а используется except Exception. Однако чаще всего перехватывают исключения по одному, для упрощения отладки (вдруг вы ещё другую ошибку сделаете, а except её перехватит).
Ещё две инструкции, относящиеся к нашей проблеме, это finally и else. Finally выполняет блок инструкций в любом случае, было ли исключение, или нет (применима, когда нужно непременно что‑то сделать, к примеру, закрыть файл). Инструкция else выполняется в том случае, если исключения не было.
f = open('1.txt')
ints = []
try:
for line in f:
ints.append(int(line))
except ValueError:
print('Это не число. Выходим.')
except Exception:
print('Это что ещё такое?')
else:
print('Всё хорошо.')
finally:
f.close()
print('Я закрыл файл.')
# Именно в таком порядке: try, группа except, затем else, и только потом finally.
Это не число. Выходим.
Я закрыл файл.
ZeroDivisionError occurs when a number is divided by a zero. In Mathematics, when a number is divided by a zero, the result is an infinite number. It is impossible to write an Infinite number physically. Python interpreter throws “ZeroDivisionError: division by zero” error if the result is infinite number.
You can divide a number by another number. The division operation divides a number into equal parts or groups. Dividing a number into zero pieces or zero groups is meaning less. In mathematics, dividing a number by zero is undefined.
If a number is divided by zero, the result wil be infinite number. Python can not handle the infinite number because the infinite number is difficult to write in concrete form. In this case, Python throws “ZeroDivisionError: division by zero”. The error would be thrown as like below.
Traceback (most recent call last):
File "/Users/python/Desktop/test.py", line 3, in <module>
c=a/b;
ZeroDivisionError: integer division or modulo by zero
[Finished in 0.1s with exit code 1]
Different Variation of the error
In different contexts the Zero Division Error-division by zero is thrown in various forms in python. The numerous variations of ZeroDivisionError are given below.
ZeroDivisionError: integer division or modulo by zero
ZeroDivisionError: long division or modulo by zero
ZeroDivisionError: float division by zero
ZeroDivisionError: complex division by zero
ZeroDivisionError: division by zero
Root Cause
The zero division error is due to either a number being divided by zero, or a number being modulo by zero. The denominator of the division operation should be a non zero numeric value. If the demonimator is zero then ZeroDivisionError will be thrown by python interpreter.
Dividing a number into zero pieces or zero groups does not make sense. The result is infinite number not representable in python. Therefore, python throws “ZeroDivisionError: integer division or modulo by zero”. This error occurs for all numbers such as integer, long, float and complex number
How to reproduce this issue
A number must be divided by an another non zero number. Python interpreter will throw ZeroDivisionError if you create a simple program with a number divided by zero. If the division denominator is set to zero, then this error will occur.
The example code below shows how this issue can be reproduced.
a = 8
b = 0
c = a / b
print c
Output
Traceback (most recent call last):
File "C:UsersUserDesktoppython.py", line 3, in <module>
c = a / b
ZeroDivisionError: division by zero
Traceback (most recent call last):
File "/Users/python/Desktop/test.py", line 3, in <module>
c = a / b
ZeroDivisionError: integer division or modulo by zero
[Finished in 0.0s with exit code 1]
Solution 1
Python can not divide a number by zero. Before doing a division or modulo operation, the denominator must be verified for nonzero. The code below shows how to handle a denominator when it is zero.
a = 8
b = 0
c = ( a / b ) if b != 0 else 0
print c
Output
0
Solution 2
If the program is not sure of the denominator value, the denominator value may be zero in some rare cases. In this case, handle the ZeroDivisionError when it occurs. The example below shows how to handle the exception of ZeroDivisionError in the code.
try:
a = 8
b = 0
c = a / b
except ZeroDivisionError:
c = 0
print c
Output
0
Solution 3
In the program, if the denominator is zero, the output of the division operation can be set to zero. Mathematically, this may not be correct. Setting zero for the division operation will solve this issue in real-time calculation. The following code shows how to set the zero for the division operation.
a = 8
b = 0
if b == 0:
c = 0
else:
c = a / b
print c
Output
0
I’m trying to calculate Gaussian probability, but when I run it through my data I get ZeroDivisionError: float division by zero
here’s the code:
def GaussianProbability(x, mean, std):
exponent = math.exp(-(math.pow(x-mean,2)/(2*math.pow(std,2))))
return (1 / (math.sqrt(2*math.pi) * std)) * exponent
and the complete error log:
ZeroDivisionError Traceback (most recent call last)
<ipython-input-22-b3fd5204c6fa> in <module>
----> 1 precisions_PDZ1,MAP,recalls_PDZ1,fp_rates_PDZ1 = CV_results(PDZ1_graphs,PDZ1_targets,'undirected')
<ipython-input-14-044940745269> in CV_results(list_graphs, list_targets, network_type, multi)
7 for part in tqdm(range(5)):
8
----> 9 probabilities_0,predictions = prediction(list_graphs[part], list_targets[part], network_type, multi)
10
11 if recalls == [] and fp_rates == []:
<ipython-input-12-beeed13223ea> in prediction(graph, actual_edges, network_type, multi)
11
12 for i in tqdm(range(len(X_test))):
---> 13 prob = ClassProbabilities(summaries, prob_class, X_test[i])
14 if (prob[0]+prob[1])==0:
15 # both probabilities are too low
<ipython-input-11-286b09a753e9> in ClassProbabilities(summaries, prob_class, x)
8 for i in range(len(classSummaries)): # for every attribute
9 mean, std = classSummaries[i]
---> 10 probabilities[classValue] *= GaussianProbability(x[i], mean, std)
11
12 return probabilities
<ipython-input-10-4a13cc5a69b2> in GaussianProbability(x, mean, std)
1 def GaussianProbability(x, mean, std):
----> 2 exponent = math.exp(-(math.pow(x-mean,2)/(2*math.pow(std,2))))
3 return (1 / (math.sqrt(2*math.pi) * std)) * exponent
ZeroDivisionError: float division by zero