【问题标题】:Error when making functions in my Python in python在 python 中的 Python 中创建函数时出错
【发布时间】:2018-09-01 17:34:11
【问题描述】:

我已经做了一个代码。它就像我们正在运行原始的 python 一样工作。它使用evalexec。当我尝试在其中创建一个函数或任何 if 语句时,它不起作用。代码如下:

print("Python\n")
while True:
    command =input(">>> ")
    if command == "quit()":break
    try:
        try:
            eval(command)
        except:
            exec(command)
    except Exception as err:
        print("Exception: "+str(err))

跑步:

Python

>>> a = input("Enter your name: ")
Enter your name: abc
>>> print(a)
abc
>>> if True:
Exception: unexpected EOF while parsing (<string>, line 1)
>>> if True:print(a);if a == "abc":print("Great Abc")
Exception: invalid syntax (<string>, line 1)
>>> 

【问题讨论】:

  • 您的问题不清楚,请多提一下您发布的两个代码快照之间的关系
  • if True: 失败,因为: 之后需要有一些东西。你可以把pass放在那里。
  • 你为什么要模仿 REPL 行为?
  • @Carcigenicate 我尝试按回车键在其中输入我的代码。
  • @mmmmmmmm eval 不知道。你可以试试(if True 然后按回车,但我怀疑它会起作用。再说一次,为什么你要重新发明 REPL?

标签: python python-3.x exec eval


【解决方案1】:

因为你一次只处理一行,如果你只写if True:,python 解释器会抛出一个错误。在普通解释器中,这将触发多行编辑,并且仅在您创建空行时才开始执行。

另一方面,如果您在 if 语句之后添加一些内容,它会起作用(例如if True: print("true"))但是您不能像您尝试做的那样将 if 语句一个接一个地链接。但是,您可以链接普通语句,例如 if True:print("first line");print("second line")

函数也存在同样的问题。他们需要在定义之后有一个语句才能被解释,通常您可以在函数被读取之前键入该定义。

您可以更改您的代码以允许这种行为,这样如果一行以: 结尾,您应该继续读取输入,并且仅在提供空行作为输入后才执行它。

【讨论】:

  • @mmmmmmmm 你指的是哪个例子?
【解决方案2】:

评估函数评估一行代码,如果语句需要最少 2 行(带有缩进)。试试 lambda 表达式

lambda x: True if a == True else False

【讨论】:

  • 不完全正确。 if 语句可以在同一行后面跟着一个语句。有关更多详细信息,请参阅我的答案或自己尝试一下。
猜你喜欢
  • 2016-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-27
  • 1970-01-01
  • 2021-01-15
相关资源
最近更新 更多