Somehow I got an Nonetype value, it supposed to be an int, but it's now a Nonetype object
如果是你的代码,找出当你期望一个数字时,你是如何得到的,并阻止它发生。
如果是其他人的代码,找出它给出None的条件,并用通常的条件代码确定一个可用于该条件的合理值:
result = could_return_none(x)
if result is None:
result = DEFAULT_VALUE
……甚至。。。
if x == THING_THAT_RESULTS_IN_NONE:
result = DEFAULT_VALUE
else:
result = could_return_none(x) # But it won't return None, because we've restricted the domain.
当您提供Python认为是
False
的任何值(例如None、0、[]、“”等)时,这将使用0。因为0是False
,您应该只使用0作为替代值(否则您会发现您的0将变成该值)。这只将
None
替换为0。因为我们是专门测试None
,所以您可以使用其他值作为替换。处理这种情况的一种常见的“Pythonic”方法被称为EAFP,因为“请求宽恕比请求许可更容易”。这通常意味着编写假定一切正常的代码,然后用一个
try..except
块包装它,以防处理不正常的事情。下面是应用于您的问题的编码样式:
或者更简单和稍快:
与此相反,更为传统的方法被称为“LBYL”,代表“跳跃前看”,这是@Soviut和其他一些人的建议。有关此主题的其他内容,请参阅我的answer和本网站其他地方对问题Determine whether a key is present in a dictionary的相关评论。
EAFP的一个潜在问题是,它可以隐藏这样一个事实,即您正在使用的代码或第三方模块的某些其他部分出了问题,特别是当异常频繁发生时(因此根本不是真正的“异常”情况)。
在其中一条评论中,你说:
如果是你的代码,找出当你期望一个数字时,你是如何得到的,并阻止它发生。
如果是其他人的代码,找出它给出
None
的条件,并用通常的条件代码确定一个可用于该条件的合理值:……甚至。。。
没有理由自动使用
0
这里-依赖于None
的“假”度的解决方案假设您需要这个。DEFAULT_VALUE
(如果它甚至存在)完全取决于代码的用途。相关问题 更多 >
编程相关推荐