MINERVA/Python 2024. 1. 21. 11:11
반응형

ZeroDivisionError: division by zero는 주로 코드에서 어떤 값을 0으로 나누려고 할 때 발생하는 오류입니다. 

이 오류를 피하는 몇 가지 방법을 아래와 같이 정리합니다.

 

1. 분모가 0인 경우를 확인하여 처리하기.

 

def ZeroDivisionError_Solve1():

    divisor = 0
    numerator = 10

    if divisor != 0:
        result = numerator / divisor
    else:
        result = 0  # 또는 다른 적절한 값을 할당

    print(result)

 

2. 예외처리 사용

0으로 나누려고 할 때 ZeroDivisionError 예외가 발생하면 예외 처리 블록이 실행되어 0 또는 다른 적절한 값을 할당

def ZeroDivisionError_Solve2():

    divisor = 0
    numerator = 10

    try:
        result = numerator / divisor
    except ZeroDivisionError:
        result = 0  # 또는 다른 적절한 값을 할당

    print(result)

 

3. numpy의 np.divide 함수 사용

분모가 0인 경우에 대해 예외를 발생시키지 않고, 대신 where 매개변수를 사용하여 분모가 0이 아닌 경우에만 나누기 연산

def ZeroDivisionError_Solve3():

    divisor = 0
    numerator = 10

    result = np.divide(numerator, divisor, out=np.zeros_like(numerator), casting='unsafe',where= divisor != 0)

    print(result)

 

4. 분모가 0인 경우에 대한 조건문 사용

각 행(row)에 대해 분모가 0이 아닌 경우에만 나누기 연산을 수행하고, 그렇지 않은 경우에는 0을 할당합니다.

def ZeroDivisionError_Solve4():

    data = {'numerator': [10, 20, 30],
            'divisor': [5, 0, 3]}
    df = pd.DataFrame(data)

    # 분모가 0이 아닌 경우에만 나누기 연산 수행
    df['result'] = df.apply(lambda row: row['numerator'] / row['divisor'] if row['divisor'] != 0 else 0, axis=1)

    print(df)

 

5. numpy의 np.where 사용

np.where를 사용하여 분모가 0이 아닌 경우에는 나누기 연산을 수행하고, 그렇지 않은 경우에는 0을 할당

def ZeroDivisionError_Solve5():
    # 예제 DataFrame 생성
    data = {'numerator': [10, 20, 30],
            'divisor': [5, 0, 3]}
    df = pd.DataFrame(data)

    # np.where를 사용하여 분모가 0인 경우에 대한 처리
    df['result'] = np.where(df['divisor'] != 0, df['numerator'] / df['divisor'], 0)

    print(df)

 

[전체코드]

import numpy as np
import pandas as pd

def ZeroDivisionError_Solve1():

    divisor = 0
    numerator = 10

    if divisor != 0:
        result = numerator / divisor
    else:
        result = 0  # 또는 다른 적절한 값을 할당

    print(result)

def ZeroDivisionError_Solve2():

    divisor = 0
    numerator = 10

    try:
        result = numerator / divisor
    except ZeroDivisionError:
        result = 0  # 또는 다른 적절한 값을 할당

    print(result)

def ZeroDivisionError_Solve3():

    divisor = 0
    numerator = 10

    result = np.divide(numerator, divisor, out=np.zeros_like(numerator), casting='unsafe',where= divisor != 0)

    print(result)


def ZeroDivisionError_Solve4():

    data = {'numerator': [10, 20, 30],
            'divisor': [5, 0, 3]}
    df = pd.DataFrame(data)

    # 분모가 0이 아닌 경우에만 나누기 연산 수행
    df['result'] = df.apply(lambda row: row['numerator'] / row['divisor'] if row['divisor'] != 0 else 0, axis=1)

    print(df)


def ZeroDivisionError_Solve5():
    # 예제 DataFrame 생성
    data = {'numerator': [10, 20, 30],
            'divisor': [5, 0, 3]}
    df = pd.DataFrame(data)

    # np.where를 사용하여 분모가 0인 경우에 대한 처리
    df['result'] = np.where(df['divisor'] != 0, df['numerator'] / df['divisor'], 0)

    print(df)


if __name__ == '__main__':
    print(f'ZeroDivisionError: division by zero')

    ZeroDivisionError_Solve1()
    ZeroDivisionError_Solve2()
    ZeroDivisionError_Solve3()
    ZeroDivisionError_Solve4()
    ZeroDivisionError_Solve5()
반응형
posted by choiwonwoo
: