Python Ошибка: InsertError: аргумент replace () 2 должен быть str, а не None - PullRequest
0 голосов
/ 05 августа 2020

Итак, я создаю сценарий python для отправки электронных писем, а шаблон, содержащий переменные-заполнители (например,% NAME%), которые будут заменены данными из базы данных.

Я использую код ниже, но проблема в том, что переменные, используемые в качестве вторых аргументов замены, не всегда могут что-либо содержать. Если только одна из этих переменных имеет значение None, сценарий завершается ошибкой InsertError: replace() argument 2 must be str, not None

with open ("D:\Scripts\html.html", "r") as htmlfile:
    html = htmlfile.read().replace("%TRACKINGNO%", TrackingNo).replace("%COURIER%", CourierName).replace("%ORDERNO%", OrderNo).replace("%TRACKURL%", URL).replace("%DESPATCHEDDATE%", DespatchedDate).replace("%NAME%", PostalName).replace("%POSTCODE%", PostCode)

Есть ли краткий способ сделать это так, чтобы, если переменная None, она заменяла заполнитель с пустой строкой?

Ответы [ 3 ]

0 голосов
/ 05 августа 2020

Вы можете попробовать:

html = htmlfile.read().replace("%TRACKINGNO%", TrackingNo or "")

Если TrackingNo равно None, по умолчанию будет "". (вы можете использовать любое строковое значение).

Если TrackingNo существует, будет использоваться значение TrackingNo.

0 голосов
/ 05 августа 2020

Попробуйте преобразовать аргумент в строку. Например:

with open ("D:\Scripts\html.html", "r") as htmlfile:
    html = htmlfile.read().replace("%TRACKINGNO%", TrackingNo).replace("%COURIER%", str(CourierName)).replace("%ORDERNO%", OrderNo).replace("%TRACKURL%", URL).replace("%DESPATCHEDDATE%", DespatchedDate).replace("%NAME%", PostalName).replace("%POSTCODE%", PostCode)

Это принудительно заменит второй аргумент CourierName строковой версией того же аргумента. Итак,

"ABCD" will remain as "ABCD"
None will be converted into "None"
0 голосов
/ 05 августа 2020

Может, можно заменить TrackingNo на TrackingNo if TrackingNo is not None else ""?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...