1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > python nonetype转换str_如何将Nonetype转换为int或字符串?

python nonetype转换str_如何将Nonetype转换为int或字符串?

时间:2022-08-15 07:25:51

相关推荐

python nonetype转换str_如何将Nonetype转换为int或字符串?

如何将Nonetype转换为int或字符串?

我有一个Nonetype值x,它通常是一个数字,但可以是None。我想将其除以一个数字,但是Python会引发:

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

我该如何解决?

user469652 asked -09-26T11:08:30Z

10个解决方案

254 votes

int(value or 0)

当您提供Python认为None的任何值(例如None,0,[],“”等)时,它将使用0。由于0为None,因此您只能使用0作为替代值(否则,您会发现 您的0将变成该值)。

int(0 if value is None else value)

这仅将None替换为0。由于我们正在测试None,因此您可以使用其他一些值作为替换。

kindall answered -09-26T11:09:51Z

38 votes

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

我以某种方式获得了一个Nonetype值,它应该是一个int值,但是现在它是一个Nonetype对象

如果是您的代码,请弄清楚当您期望有一个数字并阻止这种情况发生时如何获得0。

如果这是别人的代码,请使用通常的条件代码找出给出0的条件,并确定用于该条件的合理值:

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(如果存在的话)完全取决于代码的目的。

detly answered -09-26T11:09:18Z

14 votes

一种常见的处理此类情况的“ Python式”方法称为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的一个潜在问题是,它可以掩盖您正在使用的代码或第三方模块的其他部分出了问题的事实,尤其是在经常发生异常的情况下(因此并非真正的“例外”情况) 完全没有)。

martineau answered -09-26T11:10:47Z

10 votes

仅当您尝试通过int() None(据我所知这是唯一的NoneType值)时,才会出现TypeError808。 我要说的是,您的真正目标不应该是将NoneType转换为int或None,而是要弄清楚为什么/为什么要获得None而不是预期的数字,然后修正它或正确处理2542730738974374327816。

waffle paradox answered -09-26T11:11:15Z

2 votes

我已经成功地将int(x或0)用于这种类型的错误,只要逻辑中None应该等于0。请注意,在测试x返回False的其他情况下,该值也将解析为0。 例如 空列表,集合,字典或零长度字符串。抱歉,金德尔已经给出了这个答案。

user3109122 answered -09-26T11:11:46Z

1 votes

如果您忘记从函数返回值,则会发生这种情况:然后返回None。 查看分配给该变量的所有位置,并查看其中之一是否为函数调用,而该函数缺少return语句。

Jouni K. Seppänen answered -09-26T11:12:16Z

1 votes

在尝试对其进行任何计算之前,应检查并确保该值不为None:

my_value = None

if my_value is not None:

print int(my_value) / 2

注意:有意将my_value设置为“无”,以证明代码有效并且正在执行检查。

Soviut answered -09-26T11:12:52Z

1 votes

我在使用python电子邮件功能时遇到了同样的问题。下面是我试图将电子邮件主题检索到变量中的代码。 这对于大多数电子邮件都可以正常工作,并且会填充变量。 如果您收到来自Yahoo等的电子邮件,但发件人没有填写主题行,Yahoo不会在电子邮件中创建主题行,并且您会从函数中返回NoneType。 Martineau和Soviut都提供了正确的答案。 从编程的角度来看,IMO Soviut的答案更为简洁。 不一定来自Python。这是一些代码来显示该技术:

import sys, email, email.Utils

afile = open(sys.argv[1], 'r')

m = email.message_from_file(afile)

subject = m["subject"]

# Soviut's Concise test for unset variable.

if subject is None:

subject = "[NO SUBJECT]"

# Alternative way to test for No Subject created in email (Thanks for NoneThing Yahoo!)

try:

if len(subject) == 0:

subject = "[NO SUBJECT]"

except TypeError:

subject = "[NO SUBJECT]"

print subject

afile.close()

George Pearson answered -09-26T11:13:21Z

1 votes

在Python 3中,您也可以使用“或”关键字。 这条路:

foo = bar or 0

foo2 = bar or ""

Ferrarezi answered -09-26T11:13:51Z

0 votes

在某些情况下,具有将None转换为int零的函数会有所帮助:

def nz(value):

'''

Convert None to int zero else return value.

'''

if value == None:

return 0

return value

user2920482 answered -09-26T11:14:20Z

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。