出于某种原因,我的脚本拒绝直接从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()暗示以下输入是整数而不是字符串?为什么会这样?
答案 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
。