[英]TypeError: object of type 'bool' has no len() - Odoo v9
[英]TypeError: object of type 'bool' has no len() - Odoo v9 community
我在代碼的另一部分上仍然存在此錯誤:
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'
在我之前的問題中,此行的錯誤已解決:
_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
對象,我認為這只是添加條件的問題,因為該字段為空...
但是我仍然無法使其正常工作,這是否可以通過與上一個問題類似的方式解決?
提前致謝!
編輯
它不是重復的,因為這是另一行代碼,並且解決此問題的方法非常相似,此處略有不同,這是不重復的。
第二編輯
這就是現在的樣子,該函數的每個len
都有條件
@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'
為了避免拖累評論中的對話,我將對實際答案進行細化。
看來您的對象self.sii_xml_request
可以是a)。 字符串,或b)。 一個布爾值( True
或False
)(但是如果我錯了,請更正我)。
您會收到一個錯誤消息,因為您正試圖使用該對象的len()
來了解請求的長度,但是當該對象為True
或False
時,它將失敗,因為bool
對象沒有__len__
屬性。 您嘗試通過執行以下操作來基於上一個問題解決此問題:
(len(self.sii_xml_request) if self.sii_xml_request else '')
僅當self.sii_xml_request
僅返回字符串或False
(或等同於False
如None
或0
或[]
等)時,此方法才有效,因為如果返回True
,則它將再次嘗試獲取len()
無效的對象。
正在做:
(len(self.sii_xml_request) if self.sii_xml_request is not True or False else '')
可能可行,但是我不知道是什么決定self.sii_xml_request
返回True
, False
還是某個字符串,因此您可能希望以不同的方式處理True
和False
。 另外,您可能永遠都不希望內容長度為''
因為它通常是整數,因此如果self.sii_xml_request
為False
,則任何內容都應為0
。 如果您要同樣處理它們,請嘗試上面的內容。 否則,您可以更早定義變量content_length
,然后根據self.sii_xml_request
的值進行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)
當消息中出現“ bool”時出現這種錯誤,這意味着您在一個空字段上調用了一個函數,因此在調用任何函數之前,請先檢查該字段是否具有值。 因為在odoo中,空字段包含False值不是None我每次發現我在空字段上調用函數時,都會多次遇到此錯誤
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.