python字符串模板中的KeyError

由于新式的字符串Template对象的引进使得string 模块又重新活了过来,Template对象有两个方法:substitute()和safe_substitute()。

python中string的Template类似C语言中printf中的<格式化字符串>,使用“${*}”声明变量(类似C语言中的"%*");紧跟substitute则类似printf的<变量参数表>,必须一一对应,数量必须严格匹配。

当缺少参数(key)时,substitute会报一KeyError的异常出来;而safe_substitute则会直接原封不动的把字符串显示出来。

>>> from string import Template

>>> s =Template('There are ${howmany} ${lang} Quotation Symbols')  #声明模板

>>> print s.substitute(lang='Python', howmany=3)  #给变量传参

>>>There are 3 Python Quotation Symbols#正常输出

>>>

>>> print s.substitute(lang='Python')  #缺少key:${howmany}

>>> Traceback (most recent call last):

File "<stdin>", line 1, in ?
File "/usr/local/lib/python2.4/string.py", line 172, in substitute
return self.pattern.sub(convert, self.template)
File "/usr/local/lib/python2.4/string.py", line 162, in convert val =  mapping[named]
KeyError: 'howmany' #substitute异常报错
>>>
>>> print s.safe_substitute(lang='Python')

There are${howmany} Python Quotation Symbols #safe_substitute异常报错,缺少参数


比较矬的是,我在sql语句的--注释中出现了“${YYYYMMDD}”,结果被Template当成了变量,害我找了很久:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值