2017-07-18 77 views
0

我想创建一个字符串,我想同时替换全局和局部变量。下面的代码给我一个错误。 (KeyError异常: '表')如何在python中的字符串中插入全局和局部变量

TABLE = my_table 
def get_data(): 
    data_size = 10 
    print "get %(data_size)s rows from the table %(TABLE)s" %locals() %globals() 

我想要的代码打印以下:

get 10 rows from the table my_table 

有谁知道如何实现这一目标?提前致谢!

+0

'print“从表%s”%(data_size,TABLE)'中获取%s行' – khelwood

+0

@cᴏʟᴅsᴘᴇᴇᴅ它不适用于我。我得到 'TypeError:格式需要映射' –

+0

@PulkitBansal是的,我的坏。语法并不完美,但它是沿着这些线条的。看到我的答案。 –

回答

1

如果你想用你的格式化字符串完全按照你现在的样子,你需要指定确切映射,像这样一本字典:

mapping = {'data_size' : locals()['data_size'], 'TABLE' : globals()['TABLE']} 

,或者更简单,

mapping = {'data_size' : data_size, 'TABLE' : TABLE} 

现在,通过映射到像这样的字符串:

print "get %(data_size)s rows from the table %(TABLE)s" % mapping 

这会给你get 10 rows from the table my_table

您收到的TypeError是因为%(...)s需要以传递给字符串的格式args指定的key:value映射。

+0

'locals()['data_size']'和'globals()['TABLE']'可以写成'data_size'和'TABLE' – khelwood

+0

@khelwood Thanks,edited。首先应该保持这一点,因为它似乎与OP使用locals()/ globals()的目标是同义的。 –

+0

谢谢@COLDSPEED,这很有帮助。我没有意识到locals()和globals()基本上是字典。 –

0

您需要打印像这样:

TABLE = "my_table" 
def get_data(): 
    data_size = 10 
    print "get %s rows from the table %s"%(data_size, TABLE) 

OUTPUT:

get 10 rows from the table my_table

+0

这是一个有用的答案。仍然有什么方法可以在字符串中写入变量名称data_size和TABLE?因为随着字符串变长和复杂化,变得难以按照正确的顺序排列。 –