【问题标题】:eval() works in MacOS but not Windowseval() 适用于 MacOS 但不适用于 Windows
【发布时间】:2013-01-27 16:37:02
【问题描述】:

我正在研究 John Zelle 的 Python Programming (For Python 3),直到最近我一直在运行 10.7 的 MacBook Pro 上完成我的所有工作。我在两个平台上都在 Eclipse Juno 中工作。我决定将我所有的项目转移到装有 Windows 7 的 PC 上,并将它们导入 Eclipse Juno。我注意到每个带有eval(input()) 的应用程序都被破坏了,但它们都可以在 Macbook 上运行。我从书中输入的任何代码都是新的。为什么这在一个平台上有效,而在另一个平台上无效?以下是适用于 MacOS 但不适用于 Windows 的代码示例:

def main():
    sum = 0.0
    count = 0
    xStr = input("Enter a number (<Enter> to quit) >> ")
    while xStr != "":
        x = eval(xStr)
        sum = sum + x
        count = count + 1
        xStr = input("Enter a number (<Enter> to quit) >> ")
    print("\nThe average of the numbers is", sum / count)

main()

这在 Mac 上运行良好,但在 Windows 中出现此错误:

Enter a number (<Enter> to quit) >> 5

Traceback (most recent call last):
  File "C:\Users\Nostromo\workspace\Chapter 11\average4.py", line 18, in <module>
    main()
  File "C:\Users\Nostromo\workspace\Chapter 11\average4.py", line 12, in main
    x = eval(xStr)
  File "<string>", line 1
    5    
    ^
SyntaxError: unexpected EOF while parsing

【问题讨论】:

  • 会不会是您的 Windows 系统默认使用 Python 2 而不是 3?
  • @FrédéricHamidi:我不这么认为。如果是,它会给出eval() arg 1 must be a string or code objectxStr 确实是一个字符串。
  • @David,你说得对,Python 的eval() 只接受字符串。看起来解释器正在将 5 解析为某种前缀。这很奇怪。
  • 我猜是换行相关的问题。 (旁白:当 3.3 已经发布时,不要使用 3.0)
  • 这就是问题所在。我确定我已经安装了 3.3.0,但我猜那是在另一台 PC 上。谢谢。

标签: python python-3.x pydev eclipse-juno


【解决方案1】:

如果将 input() 更改为 raw_input() 会怎样?

【讨论】:

  • 我知道这会起作用,因为我有几个旧项目使用它。
  • 那么,您能否通过运行python --version 来确认两台机器上的 Python 版本?
  • 你可能是因为尘土飞扬。 Mac 是 3.3.0,而 Windows 只是 3.0。安装 3.3.0 看看是否能解决这个问题。
  • 更新到 3.3.0 后,错误消失了。这就是问题所在。谢谢。
【解决方案2】:

eval(input()) 无论如何都是获得你想要的东西的愚蠢方式,本书的作者不应该建议你使用它。改成int(input()),你会开心很多。

【讨论】:

  • 当然。我知道这一点,但仍然会在不解决原因的情况下留下疑问。
猜你喜欢
  • 2020-08-07
  • 2020-03-23
  • 2020-06-26
  • 2019-12-05
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多