Условное заявление: ZeroDivisionError: деление на ноль - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть функция с несколькими условными выражениями.Если у меня есть два числа, равные 0, это должно вывести «Оба отсутствуют».Когда я пытаюсь вычесть числа, он все еще пытается вычесть 0 из 0 и выполняет деление, что приводит к ошибке ZeroDivision:

line 51, in compare_sizes whole_percent = subtract_f1_f2 / previous_size * 100 ZeroDivisionError: division by zero

Я хочу иметь возможность игнорировать его при вычисленииесли оба значения равны 0 и не переходят к условному выражению, если subtract_f1_f2.Неверен ли порядок моих условных высказываний?

from __future__ import division

def human_bytes(B):
    """Return the given bytes as a human friendly KB, MB or GB"""
    B = float(B)
    KB = float(1024)  # 1024 B == 1KB
    MB = float(KB ** 2)  # 1,048,576 KB == 1MB
    GB = float(KB ** 3)  # 1,073,741,824 MB == 1GB
    TB = float(KB ** 4)  # 1,099,511,627,776 GB == 1TB

    if B < KB:
        return '{0} {1}'.format(B, 'Bytes' if 0 == B > 1 else 'Byte')
    elif KB <= B < MB:
        return '{0:.2f} KB'.format(B / KB)
    elif MB <= B < GB:
        return '{0:.2f} MB'.format(B / MB)
    elif GB <= B < TB:
        return '{0:.2f} GB'.format(B / GB)



def compare_sizes(previous_size, current_size):


    subtract_f1_f2 = int(current_size - previous_size)
    range_num = 0.4
    range_previous_day = int(previous_size * range_num)
    whole_percent = subtract_f1_f2 / previous_size * 100

    if previous_size == 0 and not current_size == 0:
        print("New File "  +  "\n")

    if previous_size > 0 and current_size > 0 and previous_size == current_size:
        print("Ok" + "\n")

    if current_size == 0 and  previous_size == 0:
        print("Both Missing " + "\n")

    if current_size == 0 and not previous_size == 0:
        print ("Missing Current Number " + "\n")

    if subtract_f1_f2 >= range_previous_day and subtract_f1_f2:
        if subtract_f1_f2 == 0 :
            pass
        else:

            print(human_bytes(previous_size) +" -> " + human_bytes(current_size) + " " +
                            "+" + str(whole_percent) + " % bigger" + "\n")
    else:

        print("Current Value Is In Range" + str(current_size) + "\n")



result = result = compare_sizes(1000,1000)
result = result = compare_sizes(0,0)
result = result = compare_sizes(0,1)
result = result = compare_sizes(0,1)
result = result = compare_sizes(1,0)
result = result = compare_sizes(1000,1400)

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Вы можете обработать ошибку любым удобным для вас способом;

try:
    whole_percent = subtract_f1_f2 / previous_size * 100
except ZeroDivisionError as e:
    # for example
    whole_percentage = 0
0 голосов
/ 07 декабря 2018

Ошибка возникает перед вводом любого оператора if, вы можете переместить строку в правильном операторе if (то есть, где предыдущий_размер! = 0 равен true) или использовать что-то вроде:

try:
    whole_percent = subtract_f1_f2 / previous_size * 100
except:
    whole_percent = "NA" ## or whatever value you want to return in this case
...