当前位置: 首页 > 面试题库 >

评估不适用于多行字符串

蒋茂
2023-03-14
问题内容

我在使用python eval函数执行多行字符串时遇到问题/

code = '''

def main():
  print "this is a test"

main()

'''

eval(code)

Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    eval(code)
  File "<string>", line 3
    def main():
      ^
SyntaxError: invalid syntax

问题答案:

eval只能评估Python 表达式
,不能评估语句。函数定义是语句,而不是表达式。

使用exec执行Python语句。

请参阅“ 顶层组件”
文档
,该文档在
文件输入

表达式输入 之间进行区分(其中包括):

file_input ::=  (NEWLINE | statement)*

在以下情况下使用此语法:

[…]

  • 解析传递给该exec语句的字符串时;

[…]的字符串参数eval()必须具有以下形式:

eval_input ::=  expression_list NEWLINE*

千万 不要 用这个来执行不可信的用户提供的文本。eval()并且exec无法防范恶意用户,如果您使用了恶意用户,他们可以并且
接管网络进程

实际上,除了在扔掉所有服务都已牢固关闭的一次性虚拟机中运行代码之外,没有任何“安全”的方法可以做到这一点。运行新的虚拟机以获取新代码,完成后或超时后丢弃整个VM。



 类似资料:
  • 本文向大家介绍Java评估算术字符串,包括了Java评估算术字符串的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 问题内容: 我如何布尔计算包含布尔表达式的字符串?喜欢: 用户应该能够定义自己的变量(),并定义自己的布尔表达式()。因此,我将所有表达式仅作为字符串使用。我如何评估它们? 问题答案: 您可以使用Nambari评论的ScriptEngine: 打印0。 还要注意,该表达式不是布尔表达式,而是按位运算。

  • 问题内容: 我必须从D / B检索一组列值并将其作为条件进行检查。 例如,我将有像字符串,在d / B柱。(值是一直比较的值)。我将在代码中声明一个变量值,我应该评估这种情况。 我怎样才能做到这一点??任何帮助都受到赞赏。谢谢。 问题答案: 这是使用标准(Java 1.6+)脚本库的示例:

  • 我正在编辑从tesseract ocr收到的一些电子邮件。 以下是我的代码: 但输出不正确。 输入: 输出: 但是当我在每次替换后将结果赋给一个新的字符串时,它工作得很好。为什么在同一个字符串中连续赋值不起作用?

  • 问题内容: 我有一个这样的字符串:现在我想用实际的换行符替换\ n,这样它将变成 理发师 这是我的代码 但是它不起作用并且给我相同的字符串 问题答案: 您需要做: 该方法在其第一个参数中期望使用正则表达式。当在Java字符串中传递2时,您实际上传递了1。问题是,是一种逃避字符也正则表达式,因此正则表达式是actualy ,所以你需要把额外的两次。

  • 我最近开始在业余时间学习java。所以为了练习,我制作了一个程序,可以测量温度(摄氏度或华氏度),并将其转换为相反的温度。我已经导入了键盘扫描仪。 我不熟悉字符串和之类的东西,程序只是跳过了用户输入部分,在那里输入C或F。有人能解释一下我能做些什么来解决这个问题吗? 谢谢!