当前位置:  开发笔记 > 编程语言 > 正文

如何将Nonetype转换为int或string?

如何解决《如何将Nonetype转换为int或string?》经验,为你挑选了4个好方法。

我有一个Nonetype价值x,它通常是一个数字,但可能是None.我想用数字除以它,但Python提出:

TypeError: int() argument must be a string or a number, not 'NoneType'

我怎么解决这个问题?



1> kindall..:
int(value or 0)

当你提供Python考虑的任何值时,这将使用0 False,例如None,0,[],""等.因为0 False,你应该只使用0作为替代值(否则你会发现你的0变成那个价值).

int(0 if value is None else value)

这仅取代None0.由于我们None专门测试,您可以使用其他值作为替换.


user469652您应该考虑将此作为接受的答案.它实际上是有帮助的,而不是居高临下
鉴于这个问题,这是最好的答案,因为用户指出None,应该是预期的,比如可能是一个函数,请求返回None的值以指示值是未知的,这种情况下None应该成为默认值在其使用情况下,通常为0.考虑izip_longest,默认参数,不同的默认参数不同(默认类型),然后默认值应为None,然后用默认值替换,但是字符串. (str,w)只取宽度的整数.
使用这个,它很优雅,解决了我的问题。

2> detly..:

在其中一条评论中,您说:

不知怎的,我得到了一个N​​onetype值,它应该是一个int,但它现在是一个Nonetype对象

如果这是你的代码,那么None当你期望一个数字并且阻止发生时,弄清楚你是如何获得的.

如果它是别人的代码,请找出它给出的条件,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.

没有理由在0这里自动使用- 依赖于"假"的解决方案None假设你会想要这个.的DEFAULT_VALUE(如果存在的话)完全取决于你的代码的目的.


+1为"正确"的解决方案.如果你的窗户经常神秘地破裂,找出原因(并抓住谁负责的破坏者),而不是阻止窗口;)
例如,当您从redis字典中检索键时,这没有用,因为缺少的键将是None.如果你想总结它们而不管它们的存在(这是完全可以接受的行为),你可能需要将None转换为0(参见kindall answer)

3> martineau..:

处理这种情况的一种常见的"Pythonic"方式被称为EAFP,因为" 它更容易请求宽恕而非许可 ".这通常意味着编写假设一切正常的代码,然后用一个try..except块包装它,以防万一它处理事情.

以下是适用于您的问题的编码样式:

try:
    my_value = int(my_value)
except TypeError:
    my_value = 0  # or whatever you want to do

answer = my_value / divisor

或者更简单,更快一点:

try:
    answer = int(my_value) / divisor
except TypeError:
    answer = 0

反向和更传统的方法被称为LBYL,它代表着" 在你跳跃之前看 "是@Soviut和其他一些人所建议的.有关此主题的其他内容,请参阅我的答案以及与该问题相关的评论确定该站点上其他地方的字典中是否存在密钥.

EAFP的一个潜在问题是,它可以隐藏您正在使用的代码的某些其他部分或第三方模块出现问题的事实,尤其是在异常经常发生时(因此并非真正的"例外"情况)在所有).



4> waffle parad..:

TypeError只会在你尝试传递时出现int() None(NoneType据我所知,这是唯一的值).我会说你的真正目标不应该转换NoneTypeint或者str,而是要弄清楚你在哪里/为什么得到None而不是预期的数字,并修复它或None正确处理.

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有