..

Python Concatenating Boolean To String Doesnt Work

문제

odoo 교육에서 name_get() 메소드에 대해 설명하고, 결과를 확인해보기 위해 레코드를 클릭하니 오류가 발생했다.

def name_get(self):
    result = []
    for record in self:
        rec_name = '[' + record.album_id.name + '] ' + record.name
        result.append((record.id, rec_name))
    return result
TypeError: can only concatenate str (not "bool") to str


해당 레코드에는 앨범(album_id)을 설정하지 않아, record.album_id.name이 False 값이다 보니, string 타입과 boolean 타입을 더할 수 없어서 발생한 오류였다.

rec_name = '[' + record.album_id.name + '] ' + record.name
# rec_name = '[' + False + '] ' + record.name

해결

방법1

앨범(record.album_id) 값이 설정된 경우와 없을 설정되지 않은 경우를 다르게 처리한다.

if record.album_id:
    rec_name = "[%s] %s" % (record.album_id.name, record.name)
else:
    rec_name = record.name

# 설정된 있는 경우 : [신사와 아가씨 OST Part.2] 사랑은 늘 도망가
# 설정되지 않은 경우 : 사랑은 늘 도망가

방법2

boolean 타입에 False를 string 타입으로 변환하여 오류가 발생하지 않도록 한다. (좋은 방법은 아니다.)

rec_name = '[' + str(record.album_id.name) + '] ' + record.name
rec_name = "[%s] %s" % (record.album_id.name, record.name)

# [False] 사랑은 늘 도망가

참고

https://stackoverflow.com/questions/46903676/python-concatenating-boolean-to-string-doesnt-work