TypeError:不支持的操作数类型为%:'NoneType'和'int'| Python 3
问题描述:
目前我正在从小数到八进制数转换器。 不过,我有时会收到此错误引起的线28:TypeError:不支持的操作数类型为%:'NoneType'和'int'| Python 3
TypeError: unsupported operand type(s) for %: 'NoneType' and 'int'
这似乎是随机发生的,有时它与一些这在代码的下一次运行刚刚被转换做的。
的代码如下:
decimaal = 0
# Laat de gebruiker een waarde in typen
def user_input():
getal = int(input('Geef het getal: '))
if getal < 10000:
return getal
else:
print('Het getal moet kleiner zijn dan 10.000!')
user_input()
# functie om getal in het decimaal- naar octaal-stelsel om te zetten
def decimaal_octaal_converter(decimaal):
resultaat = []
quotient = decimaal
rest = 0
# Maakt een lijst met het octale resultaat
while quotient != 0:
"""
Soms geeft lijn 28 de volgende error:
TypeError: unsupported operand type(s) for %: 'NoneType' and 'int'
Maar waarom?
"""
rest = quotient % 8
quotient //= 8
resultaat.append(rest)
# Lijst moet omgedraaid worden
resultaat.reverse()
octaal = ''
# De lijst naar een string omzetten zodat de gebruiker het kan lezen
for i in range(len(resultaat)):
octaal += str(resultaat[i])
return print('Het getal %s in octaal is %s' % (decimaal, octaal))
# De hoofd functie voor het omzetten van decimaal naar octaal
def converter():
decimaal_octaal_converter(user_input())
converter()
这是一个项目,因此,当我第一次尝试将“10000”,然后发生< 10.000部分和荷兰的评论的
这个问题“ 9999'
答
user_input()
返回None
如果您最初输入等于或大于10000的数字,因为递归调用结果被忽略。当user_input()
返回None
时,quotient
结果被设置为None
,你得到你的错误。
添加return
:
def user_input():
getal = int(input('Geef het getal: '))
if getal < 10000:
return getal
else:
print('Het getal moet kleiner zijn dan 10.000!')
return user_input()
更妙的是,不使用递归。所有你需要的是一个无限循环:
def user_input():
while True:
getal = int(input('Geef het getal: '))
if getal < 10000:
return getal
else:
print('Het getal moet kleiner zijn dan 10.000!')
请参阅Asking the user for input until they give a valid response了解更多详情。
+0
有道理,非常感谢! – BDK
它是你的'user_input()'函数。如果第一个呼叫无效,则不返回值。不要在这里使用递归,把你的'input()'放到一个循环中。 – cdarke