带有基数10的int()的无效文字:''用于map(int,str(num))

时间:2016-09-23 17:55:22

标签: python

我正在运行一个递归函数,它接受一个正整数和一个列表(在函数运行时更新):

def happy_number(num, tracking_list = []):
    if (num == 1):
        print 1
    else:
        digit_list = map(int, str(num)) 
        digit_sum = 0
        for n in digit_list:
            digit_sum = (n ** 2) + digit_sum
        if digit_sum in tracking_list:
            print 0
        else:
            tracking_list.append(digit_sum)
            happy_number(digit_sum, tracking_list)

运行时,它会抱怨:

digit_list = map(int, str(num)) 

它给出了错误:

ValueError: invalid literal for int() with base 10: ''

这里发生了什么?

1 个答案:

答案 0 :(得分:0)

听起来你正在从一个文件中解析你的数字,当一个空格label_from_instance或换行符' '出现时(或任何不是字符串数字的那个),你的脚本将失败。你可以尝试:

'\n'

该行:

def happy_number(num, tracking_list = []):
    if (num == 1):
        print 1
    else:
        digit_list = map(int, str(num if num.isdigit() else ''))
        digit_sum = 0
        for n in digit_list:
            digit_sum = (n ** 2) + digit_sum
        if digit_sum in tracking_list:
            print 0
        else:
            tracking_list.append(digit_sum)
            happy_number(digit_sum, tracking_list)

将执行与之前相同的操作,但如果您传递digit_list = map(int, str(num if num.isdigit() else '')) 不是字符串数字,则将为空列表[]。如果您愿意,请将最后的num替换为另一个默认值。