1

何らかの理由で、私のスクリプトは 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 must be a string or code object」というエラー メッセージが表示されます。次の入力が文字列ではなく整数であることを意味するために eval() を使用するポイントではありませんか? なぜこうなった?

4

2 に答える 2

4

Python 2 では、Python 3input()と同等です。ターミナルでは Python 3 で実行していると思いますがeval(input())、TextWrangler は Python 2 を使用します。eval(eval(input()))eval(5)

これを修正するには、TextWrangler を更新するか、ターミナルで Python 2 を使用する必要があります。2 番目のオプションが必要な場合は、に置き換える必要がありeval(input())ますinput()

補足 -evalこのように使用するのは悪い考えです (危険です)。a, b, c = map(int, input().split(","))代わりに (Python 3 で) のようなことを行う必要があります。

于 2014-06-30T20:11:50.477 に答える
0

問題はありませんeval。問題は、標準入力ストリームinputから読み取ろうとする にあります。sys.stdin

これを回避したい場合は、evalを使用する代わりに、 に引数を引数として渡す必要がありますinput

于 2014-06-30T20:11:53.137 に答える