如何在python中使用out'exec()'命令

如何在python中使用out'exec()'命令,python,exec,Python,Exec,有关以下代码: command = '\'{:.' + str(3) + 'f}\'.format(' + str(12.6543423) + ')' print(command) print('{:.3f}'.format(12.6543423)) print(exec(command)) 预期成果: 实际结果: 有人能告诉我我做错了什么以及如何修复它吗?我正在尝试编写一个数字舍入函数并试图理解exec命令。使用instead of exec获取表达式返回的结果。使用instead of

有关以下代码:

command = '\'{:.' + str(3) + 'f}\'.format(' + str(12.6543423) + ')'

print(command)
print('{:.3f}'.format(12.6543423))
print(exec(command))
预期成果:

实际结果:

有人能告诉我我做错了什么以及如何修复它吗?我正在尝试编写一个数字舍入函数并试图理解exec命令。

使用instead of exec获取表达式返回的结果。

使用instead of exec获取表达式返回的结果。

使用eval

使用eval

或者您可以使用exec

command = '\'{:.' + str(3) + 'f}\'.format(' + str(12.6543423) + ')'
print(command)
mycode = """print('{:.3f}'.format(12.6543423))"""

print('{:.3f}'.format(12.6543423))
exec(mycode)
或者您可以使用exec

command = '\'{:.' + str(3) + 'f}\'.format(' + str(12.6543423) + ')'
print(command)
mycode = """print('{:.3f}'.format(12.6543423))"""

print('{:.3f}'.format(12.6543423))
exec(mycode)

您混淆了exec和eval:

In [27]: command = 'print'+'('+'\'{:.' + str(3) + 'f}\'.format(' + str(12.6543423) + ')'+')'

In [28]: exec(command)
12.654

您混淆了exec和eval:

In [27]: command = 'print'+'('+'\'{:.' + str(3) + 'f}\'.format(' + str(12.6543423) + ')'+')'

In [28]: exec(command)
12.654

或者根本不使用exec或eval。使用“功能”格式提供:


或者根本不使用exec或eval。使用“功能”格式提供:


你是说eval吗?看看这里叹气:根本不需要使用exec或eval…你是说eval吗?看看这里:根本不需要使用exec或eval…而是使用@MauroBaraldi Concatenation use+,从文档中可以看出,提供的字符串或节点可能只包含以下Python文本结构:字符串、数字、元组、列表、dicts、boolean和None。如果我错了,那就帮我。我很想知道,+操作不是eval的一个功能。Python首先连接字符串,然后才将单个字符串传递给eval。当然,每种编程语言中的所有函数调用都是如此…@MauroBaraldi:你试过literal_eval吗?它在这种情况下不起作用,因为literal_eval不会为您调用format。它不会调用任何函数,这就是避免代码执行的关键所在。取而代之的是@MauroBaraldi Concatenation using+不包括在其中,从文档中提供的字符串或节点可能只包含以下Python文本结构:字符串、数字、元组、列表、dicts、布尔值和None。如果我错了,那就帮我。我很想知道,+操作不是eval的一个功能。Python首先连接字符串,然后才将单个字符串传递给eval。当然,每种编程语言中的所有函数调用都是如此…@MauroBaraldi:你试过literal_eval吗?它在这种情况下不起作用,因为literal_eval不会为您调用format。为了避免代码执行,它不会调用任何函数,这就是关键所在?它在这种情况下不起作用,因为literal_eval不会为您调用format。为了避免代码执行,它不会调用任何函数,这就是关键所在?它在这种情况下不起作用,因为literal_eval不会为您调用format。为了避免代码执行,它不会调用任何函数,这就是关键所在。我也会用eval来代替。但它仍然可以与exec一起使用。在我看来,关于exec有很多困惑,还有一些来自python2和python3的更改。我也会用eval来代替。但它仍然可以与exec一起使用。在我看来,关于exec,还有一些来自python2和python 3的更改,有很多困惑。啊,谢谢你-我不知道你可以在花括号中放花括号,可能应该先尝试一下。谢谢即便如此,我还是保持当前答案的正确性,因为我也想了解eval和exec。@JakeLevi了解eval和exec很好。了解它们最重要的一点是,它们真的很钝,你几乎从来都不需要。啊,谢谢你-我不知道你可以在花括号内放花括号,可能应该先试试。谢谢即便如此,我还是保持当前答案的正确性,因为我也想了解eval和exec。@JakeLevi了解eval和exec很好。了解它们最重要的一点是,它们确实是你几乎从不需要的钝器。
In [27]: command = 'print'+'('+'\'{:.' + str(3) + 'f}\'.format(' + str(12.6543423) + ')'+')'

In [28]: exec(command)
12.654
>>> '{:.{}f}'.format(12.6543423, 3)
12.654