我有两个结构相同但任务不同的代码。其中一个生成正确答案,而另一个生成TypeError
:
TypeError:int()参数必须是字符串或数字,而不是'generator'
# The correct one
def square_digits(num):
return int(''.join(str(int(i)**2) for i in str(num)))
# The one generates Type error
def mirror(num):
return int(''.join(str(num)[i]) for i in range(len(str(num))-1,-1,-1))
答案 0 :(得分:0)
我认为编写函数的方式可能令人困惑且不清楚。这也可能使您无法意识到错误的出处,因此我拿起您的代码并转身
overflow:auto;
转换成等效的代码,但是我用常规的def square_digits(num):
return int(''.join(str(int(i)**2) for i in str(num)))
# The one generates Type error
def mirror(num):
return int(''.join(str(num)[i]) for i in range(len(str(num))-1,-1,-1))
循环替换了generator对象:
for
由于代码本身是等效的,因此def square_digits(num):
result = []
for i in str(num):
result += [str(int(i)**2)]
result = ''.join(result)
result = int(result)
return result
# The one generates Type error
def mirror(num):
result = []
for i in range(len(str(num))-1,-1,-1):
result += [''.join(str(num)[i])]
result = int(result)
return result
仍然会产生相同的错误:
mirror
致电时
Traceback (most recent call last):
File "test.py", line 27, in <module>
print(mirror(12))
File "test.py", line 22, in mirror
result = int(result)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'
在result = int(result)
函数中,mirror
仍然是一个列表。这就是错误的来源。
当您查看这段未公开的代码时,这仍然是您要编写的内容还是在算法中发现了错误?