Python错误:InsertError:replace()参数2必须是str,而不是None

2024-04-20 00:07:45 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我创建了一个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时用空字符串替换占位符


Tags: 数据代码脚本none模板数据库内容参数
3条回答

尝试将参数转换为字符串。 例如:

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"

您可以尝试:

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

如果TrackingNoNone,它将默认为""。(您可以在此处使用任何喜欢的字符串值)

如果存在TrackingNo,它将使用TrackingNo的值

也许你可以用TrackingNo if TrackingNo is not None else ""来代替TrackingNo

相关问题 更多 >