遇到两个特定值时的 TypeError
Posted
技术标签:
【中文标题】遇到两个特定值时的 TypeError【英文标题】:TypeError when two specific values are encountered 【发布时间】:2021-08-14 21:46:40 【问题描述】:除 86 和 93 之外的所有数字都运行良好。只有 86 和 93 会抛出 TypeError
。
但我想使用 86 和 93 来包含所有数字。我该怎么办?
from tkinter import *
app=Tk()
app.title("progress")
app.geometry("800x500+365+120")
q='weigh':100,'goal':75,'now':86 #or 'now':93
def bar():
first=int(q['weigh'])
achieve=int(q['goal'])
today=int(q['now'])
def num(n):
for z in range(0,n):
y=(first-achieve)*(z/100)
if (first-today)==y:
return z
if today<achieve:
z=100
return z
rate=int(num(101)/10)
for _ in range(1,rate+1):
Entry(app,bg="blue",width=4).pack(side=LEFT)
for _ in range(rate,10):
Entry(app,width=4).pack(side=LEFT)
Button(app,text="OK",command=bar).pack()
app.mainloop()
错误:
TypeError: unsupported operand type(s) for /: 'NoneType' and 'int'
【问题讨论】:
num()
返回了None
,所以你可以调试它,找出问题所在
@OlvinRoght TypeError 发生在 rate=int(num(101)/10) 上。
【参考方案1】:
根据评论:num()
返回None
,所以你可以调试它,找出问题所在
您永远不会在num()
中输入两个 if 块之一。这意味着您永远无法到达return z
。在 Python 中,如果没有明确的 return
语句,所有方法都会隐式返回 None
。因此,您可能想要处理迭代 range(0,n)
并且从不输入 if 块之一的情况。在这种情况下,您应该返回一些东西或引发错误来处理这种情况。
编辑:
循环遍历整个范围时可能会引发错误。然后你会发现这是真正的问题。您永远不会输入 if 块之一。您可以捕获错误或添加一些有意义的返回值,例如 return 0
或您的代码中任何有意义的值。
def num(n):
for z in range(0,n):
y=(first-achieve)*(z/100)
if (first-today)==y:
return z
if today<achieve:
z=100
return z
raise ValueError
【讨论】:
TypeError 发生在 rate=int(num(101)/10) 上。 是的,看起来 num() 返回 None。以上是关于遇到两个特定值时的 TypeError的主要内容,如果未能解决你的问题,请参考以下文章
Oracle/SQL:将日期和时间连接成单个日期值时的数字格式模型无效