python
  • openerp
  • odoo-9
  • 2016-08-24 109 views 0 likes 
    0

    我仍然有这个错误的代码的另一部分:类型错误:类型“布尔”对象没有LEN() - Odoo V9社区

    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错误是解决这一行:

    _logger.info('len (como viene): %s' % (len(self.sii_xml_request) if self.sii_xml_request else '') 
    

    现在我再次拥有它的下一个,我已经试过了条件像以前一样,但我仍然解决不了的,必须与语法什么的,错误是这句话:

     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对象再次,我认为仅仅是添加的条件,因为该字段为空的问题...

    但我仍然无法使其正常工作,这是可解与我之前的问题类似吗?

    在此先感谢!

    编辑

    这不是一个重复,因为这是另一行代码,并解决它不会在这里应用非常非常相似的方式,这是一个稍微不同的语法。

    第二个编辑

    这是它的外观,现在,条件是此功能

    @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' 
    
    +0

    您可以显示“self.sii_xml_request”的定义吗?当出现这个错误时,这是​​因为该属性返回'True'或'False',并且您正在尝试调用'len()',这对布尔值不起作用。你需要确保'self.sii_xml_request'总是返回一个字符串(如果这是你想要它返回的) – elethan

    +0

    (新的评论,因为旧的太老,无法编辑)。 '(len(self.sii_xml_request)if self.sii_xml_request else'')'也可以在这种情况下工作,但只有当'self.sii_xml_request'返回'False';如果它返回“真”,它将以相同的方式失败。 – elethan

    +0

    [TypeError:'bool'类型的对象有可能重复没有len() - Odoo v9](http://stackoverflow.com/questions/39113494/typeerror-object-of-type-bool-has-no-len -odoo-v9) – elethan

    回答

    1

    为了避免拖在评论谈话的每len,我要对实际的答案采取一些措施。

    看起来你的对象self.sii_xml_request可以是a)。一个字符串,或b)。布尔型(TrueFalse)(尽管如果我错了,请纠正我)。

    你得到一个错误,因为你试图把该对象的len()获得请求的长度的想法,但是当对象是TrueFalse这将失败,因为bool对象不具有__len__属性。您尝试基于通过这样做,而不是以前的问题,解决这个:

    (len(self.sii_xml_request) if self.sii_xml_request else '') 
    

    如果self.sii_xml_request永远只能返回一个字符串或False(或东西是相当于FalseNone0[],等这只会工作),因为如果它返回True,那么它将再次尝试获取不起作用的对象的len()

    这样做:

    (len(self.sii_xml_request) if self.sii_xml_request is not True or False else '') 
    

    可能的工作,但我不知道是什么决定是否self.sii_xml_request回报TrueFalse或一些字符串,你可能要处理TrueFalse不同。另外,你可能永远不想拥有内容长度为'',因为它通常是一个整数,所以如果有任何你应该是0,如果self.sii_xml_requestFalse。如果你想要处理它们,请尝试我上面提到的。否则,您可以先定义一个变量content_length,并根据self.sii_xml_request的值相应地设置它。例如:

    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) 
    
    +0

    谢谢elethan,但现在,'线108,在send_xml_file response = pool.urlopen('POST',url,headers = { TypeError:objec 'bool'类型没有len()':''( – NeoVe

    +0

    想要再试一次,有了第一个解决方案,对不起,我会尽快写回来 – NeoVe

    1

    这样那样的错误,当你得到这意味着你调用一个空场的功能,以便在打电话之前,任何功能检查,如果该字段的值第一的消息在“bool的”。因为在odoo空字段中包含False值并非无我每次发现我在空字段调用函数时都会出现此错误

    相关问题