Python发送HTML邮件插入变量时出现KeyError: ' border'的解决求助
解决Python发送带HTML表格邮件时的format语法错误
我来帮你搞定这个问题——你碰到的KeyError: ' border'其实是两个小问题叠加导致的,咱们一步步拆解修复:
问题到底出在哪?
- 多余的语法笔误:你最后一行代码里写了
"""".format(code=code),这里多了一个额外的双引号,应该是""".format(code=code)(虽然你说报错是KeyError,但这个小错误也得先修正) - 大括号被误解析:HTML样式部分里的
{ border: 1px solid black;}这种写法,会被str.format()当成要替换的占位符——它以为你要替换border这个变量,但你根本没定义这个变量,所以直接抛出KeyError。
两种简单的修复方案
方案1:转义大括号(兼容所有Python版本)
把HTML里所有需要保留的单个大括号改成两个大括号({{和}}),这样str.format()就会把它们解析成普通的大括号,而不是占位符。修正后的完整代码:
code = "Somebody" html = """ <!DOCTYPE html> <html> <head> <style> table, th, td {{ border: 1px solid black; border-collapse: collapse;}} th, td {{padding: 5px;}} th {{text-align: left;}} </style> </head> <body> <h2>Basic HTML Table</h2> <table style="width:10%"><tr><th>Firstname</th></tr><tr><td>Jill</td></tr><tr><td>{code}</td></tr></table></body></html> """.format(code=code)
方案2:用f-string(Python3.6+更简洁)
如果你用的是Python3.6及以上版本,f-string会更省心——它只会解析带变量的{code},普通大括号只要写成{{就能输出{,写法更清爽:
code = "Somebody" html = f""" <!DOCTYPE html> <html> <head> <style> table, th, td {{ border: 1px solid black; border-collapse: collapse;}} th, td {{padding: 5px;}} th {{text-align: left;}} </style> </head> <body> <h2>Basic HTML Table</h2> <table style="width:10%"><tr><th>Firstname</th></tr><tr><td>Jill</td></tr><tr><td>{code}</td></tr></table></body></html> """
内容的提问来源于stack exchange,提问作者Mark K
相关产品推荐
相关产品推荐

