蟒蛇如何转换Nonetype为int或字符串

我有一个Nonetype值X,它通常是一个数字,但可能是无。 我想通过一个数字来划分它,但蟒蛇说:

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

我怎么能解决

--------------解决方案-------------

在该意见中的一个,你说:

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

好吧,如果这是你的代码,找出如何你要None ,当你想到一个号码, 阻止这种情况发生。

如果是别人的代码,找出在其所提供的条件None ,并确定一个合理的值,以用于该。

int(value or 0)

这将使用0的情况下,当你提供了Python认为任何值False ,如无,0,[],“”等。由于0是False ,你应该只使用0作为替代值(否则你会发现您的0变成那个值)。

int(0 if value is None else value)

这仅替换None为0。由于我们正在测试None具体而言,可以用一些其他的值作为替代。

这类型错误只有当你试图通过INT()无(这是唯一NoneType价值,因为据我所知)出现。 我要说的是,你真正的目标不应该是转换NoneType为int,而是要找出其中/你为什么没有得到,而不是一个数字不如预期,然后要么修复,或妥善处理无。

一个共同的“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 = my_value / divisor
except TypeError:
answer = 0

逆多的传统方法被称为LBYL表示“ 看在你飞跃 ”是什么@Soviut和一些其他的建议。 有关此主题的更多报道见我的回答和问题有关的意见“,确定某个键是否存​​在于一个Python字典”在本网站其他地方。

EAFP一个潜在的问题是,它可以隐藏的事实,什么是错的与你的代码或第三方模块,您使用的其他部分,尤其是当异常频繁发生(因此不是真正的“例外”情况在所有)。

如果你忘了从一个函数返回一个值,就会发生这种情况:它然后返回无。 看看你在哪里赋予此变量的所有地方,看看是否其中一人是一个函数调用其中函数缺少return语句。

我有使用Python电子邮件功能相同的问题。 下面是我试图检索电子邮件主题到一个变量的代码。 这适用于大多数的电子邮件和可变填充。 如果您收到来自雅虎的电子邮件或类似的发送者也没有填写主题行雅虎不会创建在电子邮件主题行,你会得到一个NoneType从函数返回。 马蒂诺提供了一个正确的答案,以及Soviut。 国际海事组织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()

您应该检查以确保不是没有尝试在它执行任何计算之前:

my_value = None
if my_value is not None:
print int(my_value) / 2

注意my_value被有意设置为无证明代码作品和正在执行的检查。

下面是一个类似的问题我的回答

class Andand(object):
def __init__(self, item=None):
self.item = item

def __getattr__(self, name):
try:
item = getattr(self.item, name)
return item if name is 'item' else Andand(item)
except AttributeError:
return Andand()

def __call__(self):
return self.item

class Foo(object): pass

obj = Foo()
obj.foo = Foo()
something = Andand(obj).foo()
nothing = Andand(obj).foo.bar.baz()

分类:蟒蛇 时间:2015-03-14 人气:3
本文关键词: 蟒蛇
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.441 (s). 10 q(s)