Python:脚本仅在终端中导入时运行。苹果电脑

时间:2014-06-30 20:09:45

标签: python macos eval textwrangler

出于某种原因,我的脚本拒绝直接从Text Wrangler运行,但在导入终端时工作正常。

import math

def main():
    print("This program find the real solutions to a quadratic\n")
    a,b,c, = eval(input("Please enter the coefficients (a,b,c): "))
    discRoot = math.sqrt(b * b -4 * a * c)
    root1 = (-b + discRoot) / (2 * a)
    root2 = (-b - discRoot) / (2 * a)
    print("\nThe solutions are:" , root1, root2)


main()

当我在textwrangler中运行它时,我收到错误消息" TypeError:eval()arg 1必须是字符串或代码对象"。是不是使用eval()暗示以下输入是整数而不是字符串?为什么会这样?

2 个答案:

答案 0 :(得分:4)

在Python 2中,input()相当于Python 3中的eval(input())。我认为在终端中你使用Python 3运行它,但TextWrangler使用Python 2因此TextWrangle正在进行{{1 - 评估为eval(eval(input())),这会导致您看到的错误。

要解决此问题,您需要更新TextWrangler,或在终端中使用Python 2。如果您想要第二个选项,则应将eval(5)替换为eval(input())

旁注 - 像这样使用input()是一个坏主意(这很危险)。您可能应该执行类似eval(在Python 3中)的操作。

答案 1 :(得分:0)

问题不在于eval。问题出在input,它试图从标准输入流sys.stdin读取。

如果你想绕过它,你应该将参数传递给eval作为参数,而不是使用input