簡體   English   中英

TypeError:類型為'bool'的對象沒有len()-Odoo v9

[英]TypeError: object of type 'bool' has no len() - Odoo v9

我正在嘗試通過Odoov9模塊連接到Web服務。

這是我的課:

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'

但是每次它解析代碼以連接到服務器時,都會引發此錯誤:

Odoo Server Error

Traceback (most recent call last):
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/http.py", line 646, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/http.py", line 683, in dispatch
result = self._call_function(**self.params)
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/http.py", line 319, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/service/model.py", line 118, in wrapper
return f(dbname, *args, **kwargs)
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/http.py", line 312, in checked_call
result = self.endpoint(*a, **kw)
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/http.py", line 962, in __call__
return self.method(*args, **kw)
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/http.py", line 512, in response_wrap
response = f(*args, **kw)
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/addons/web/controllers/main.py", line 901, in call_button
action = self._call_kw(model, method, args, {})
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/addons/web/controllers/main.py", line 889, in _call_kw
return getattr(request.registry.get(model), method)(request.cr, request.uid, *args, **kwargs)
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/api.py", line 250, in wrapper
return old_api(self, *args, **kwargs)
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/api.py", line 381, in old_api
result = method(recs, *args, **kwargs)
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/addons/l10n_cl_dte/models/invoice.py", line 102, in send_xml_file
_logger.info('len (como viene): %s' % len(self.sii_xml_request))
TypeError: object of type 'bool' has no len()

錯誤在這條線上

_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))

我已經搜索過SO,它似乎與括號有關,但是我仍然不確定。

有什么想法嗎?

提前致謝!

編輯

這是設置它的代碼:

    sii_xml_request = fields.Text(
    string='SII XML Request',
    copy=False,
    )

當您嘗試訪問self.sii_xml_request時。 首先檢查它的值是否為空。

在您的情況下,它返回一個空字符串False 為避免這種情況,請嘗試以下代碼:

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

如果其中包含值,則只會記錄“ self.sii_xml_request”。 否則,它將只記錄一個空字符串。 您當然可以更改此設置,以記錄與“ self.sii_xml_request”中沒有值的其他顯示內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM