python
  • openerp
  • odoo-9
  • 2016-08-24 98 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值並非無我每次發現我在空字段調用函數時都會出現此錯誤

    相關問題