即使在使用 if 语句避免被 0 除后,python 函数中的除法错误仍为零

Zero division error in python function even after using if-statement to avoid division by 0

我正在编写一个函数,该函数 returns 可以除以它所属的整数的总位数(整数)。 对于前整数 -111 count - 3 因为所有 1,1,1 除以 111 整数 - 103456 计数 - 2 只能被 1,4 整除。 为了处理除以 0 的特殊情况,我使用了 if-else 语句。但是,我仍然遇到除零错误。为什么我仍然收到此错误? 我的错误信息:-ZeroDivisionError:integer division or modulo by zero

我的代码-

    count=0
    divisors_list=[]
    number_in_string = str(n)
    divisors_list=list(number_in_string)
    for divisor in divisors_list:
       if divisor != 0:
            if n%int(divisor) == 0:
               count+=1
    return count

x=findDigits(103456)

int(divisor) 可以是 0 即使 divisor != 0.

>>> divisor = 0.5
>>> int(divisor)
0

我建议请求原谅而不是允许,然后抓住 ZeroDivisionError

try:
    if n%int(divisor) == 0:
        count += 1
except ZeroDivisionError:
    pass

问题是将字符串作为整数使用不当。

修复代码的一种方法是:

def findDigits(n):
    count = 0
    number_in_string = str(n)
    divisors_list = list(number_in_string)
    for divisor in divisors_list:
        # *** at this point, divisor is a string ***
        divisor = int(divisor)  # <== cast it to int
        if divisor != 0:
            if n % divisor == 0:
               count += 1
    return count