【发布时间】:2011-08-17 05:05:35
【问题描述】:
import re
r = re.compile("#{([^}]*)}")
def I(string):
def eval_str_match(m):
return str(eval(m.group(1)))
return r.sub(eval_str_match,string)
* 除了 python 品味/风格/标准
有没有比单字母方法更简洁的方法来调用它?
正则表达式有什么可能遗漏的吗?
我应该使用 repr 而不是 str 吗?
我知道 eval 可能很危险,但我不明白为什么
I("#{some_func()}\n")
然后更糟
"%s\n" % str(some_func())
【问题讨论】:
-
更糟糕的是,您没有从语言或 IDE 进行任何错误检测。此外,如果您忘记了 # 用户将看到实际代码。此外,如果您不小心在包含用户输入的字符串上调用了“I”,您将面临很大的安全漏洞。可能还有更多原因。
-
也许是一个 ide 或一个检查器,但我认为无论哪种方式,python 都会出现异常,不是吗?
-
如果你有类似 "foo)(" 的语法错误,Python 会在模块加载时引发异常。
标签: python string-interpolation