首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError:'bool‘类型的对象没有len() - Odoo v9社区

TypeError:'bool‘类型的对象没有len() - Odoo v9社区
EN

Stack Overflow用户
提问于 2016-08-24 17:10:40
回答 2查看 4.4K关注 0票数 0

在代码的另一部分上仍然有这个错误:

代码语言:javascript
复制
class invoice(models.Model):
_inherit = "account.invoice"

@api.multi
def send_xml_file(self):
    # haciendolo para efacturadelsur solamente por ahora
    host = 'https://www.efacturadelsur.cl'
    post = '/ws/DTE.asmx' # HTTP/1.1
    url = host + post
    _logger.info('URL to be used %s' % url)
    # client = Client(url)
    # _logger.info(client)
    _logger.info('len (como viene): %s' % len(self.sii_xml_request))

    response = pool.urlopen('POST', url, headers={
        'Content-Type': 'application/soap+xml',
        'charset': 'utf-8',
        'Content-Length': len(
            self.sii_xml_request)}, body=self.sii_xml_request)

    _logger.info(response.status)
    _logger.info(response.data)
    self.sii_xml_response = response.data
    self.sii_result = 'Enviado'

在我之前的question中,这个错误在这一行上得到了解决:

代码语言:javascript
复制
_logger.info('len (como viene): %s' % (len(self.sii_xml_request) if self.sii_xml_request else '')

现在,我在下一篇文章中又讲了一遍,我尝试过像以前那样使用条件,但我仍然无法解决它,必须与语法或其他相关,错误就在这个句子上:

代码语言:javascript
复制
        response = pool.urlopen('POST', url, headers={
        'Content-Type': 'application/soap+xml',
        'charset': 'utf-8',
        'Content-Length': len(
            self.sii_xml_request)}, body=self.sii_xml_request)

特别是在self.sii_xml_request)}, body=self.sii_xml_request)上又有了sii_xml_request对象,我认为这只是一个添加条件的问题,因为字段是空的.

但是我还是不能让它正常工作,这和我之前的问题一样可以解决吗?

提前感谢!

编辑

这不是一个重复,因为这是另一行代码,而且非常类似的解决方法不会适用于这里,这是一个稍微不同的语法。

二次编辑

这就是它现在的样子,条件是这个函数的每个len

代码语言:javascript
复制
@api.multi
def send_xml_file(self):
    # haciendolo para efacturadelsur solamente por ahora
    host = 'https://www.efacturadelsur.cl'
    post = '/ws/DTE.asmx' # HTTP/1.1
    url = host + post
    _logger.info('URL to be used %s' % url)
    # client = Client(url)
    # _logger.info(client)
    _logger.info('len (como viene): %s' % len(self.sii_xml_request)if self.sii_xml_request else '')
    #if self.sii_xml_request:
    response = pool.urlopen('POST', url, headers={
        'Content-Type': 'application/soap+xml',
        'charset': 'utf-8',
        'Content-Length': (len(
            self.sii_xml_request) if self.sii_xml_request else '')}, body=self.sii_xml_request)
    #else ''(len(self.sii_xml_request) if self.sii_xml_request else '') 

    _logger.info(response.status)
    _logger.info(response.data)
    self.sii_xml_response = response.data
    self.sii_result = 'Enviado'
EN

回答 2

Stack Overflow用户

发布于 2016-08-24 19:26:45

为了避免在评论中拖拖拉拉,我将对一个实际的答案进行分析。

似乎您的对象self.sii_xml_request可以是a)。A字符串,或b)。布尔值(TrueFalse) (但如果我错了,请纠正我)。

您正在收到一个错误,因为您试图获取该对象的len()来了解请求的长度,但是当该对象是TrueFalse时,这将失败,因为bool对象没有__len__属性。您尝试根据前面的问题解决这个问题,方法是这样做:

代码语言:javascript
复制
(len(self.sii_xml_request) if self.sii_xml_request else '')

只有当self.sii_xml_request只返回一个字符串或False (或类似于None0[]False的内容)时才能工作,因为如果它返回True,那么它将再次尝试获取不工作的对象的len()

做:

代码语言:javascript
复制
(len(self.sii_xml_request) if self.sii_xml_request is not True or False else '')

可能会工作,但我不知道self.sii_xml_request是返回TrueFalse还是某些字符串的决定因素,您可能希望以不同的方式处理TrueFalse。而且,您可能永远不希望内容长度为'',因为它通常是一个整数,所以如果有什么需要,如果self.sii_xml_requestFalse,则应该是False。如果你想用同样的方法处理它们,那就试试我上面的。否则,您可以在前面定义变量content_length,并根据self.sii_xml_request的值相应地设置它。例如:

代码语言:javascript
复制
if isinstance(self.sii_xml_request, bool):
    content_lengthj == int(self.sii_xml_request)  # 1 if True else 0
else:
    content_length = len(self.sii_xml_request)

...
response = pool.urlopen('POST', url, headers={
        'Content-Type': 'application/soap+xml',
        'charset': 'utf-8',
        'Content-Length': content_length}, body=self.sii_xml_request)
票数 1
EN

Stack Overflow用户

发布于 2016-08-28 16:48:25

当您在消息中得到'bool‘时,这种错误意味着您在一个空字段上调用了一个函数,所以在调用任何函数之前,先检查该字段是否有值。因为在odoo空字段中包含假值,而不是空值,所以每次我发现要在空字段上调用函数时,都会出现这个错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39129302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档