首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >赋值的语法错误

赋值的语法错误
EN

Stack Overflow用户
提问于 2014-11-13 22:37:16
回答 2查看 217关注 0票数 4

因为某种原因,当我跑

代码语言:javascript
运行
复制
import sys
from fractions import Fraction
for i, j in zip(["a","b","c","d","e","f"], range(1,6)):
    eval("{0} = int(sys.argv[{1}])".format(i, j))
if a*d != c*b:
    x = (e*d-b*f)/(a*d-c*b) 
    y = (a*f-c*e)/(a*d-c*b)
    print "x = ", x , ", y = ", y
elif e*d-b*f == 0 and a*f-e*c == 0:
    print "Infinite solutions"
    print "Slope = ", Fraction(-a,b), ", Y-Intercept = ", Fraction(e,b)
else:
    print "No solution"

使用python2 py.py 1 3 3 9 5 15,它会给出以下错误

代码语言:javascript
运行
复制
Traceback (most recent call last):
  File "py.py", line 4, in <module>
    eval("{0} = int(sys.argv[{1}])".format(i, j))
  File "<string>", line 1
    a = int(sys.argv[1])
      ^
SyntaxError: invalid syntax

对为什么会发生这种事有什么想法吗?我确信这是有效的语法,但可能会把它搞砸了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-13 22:53:10

这是对eval的不必要的使用。你的代码:

代码语言:javascript
运行
复制
for i, j in zip(["a","b","c","d","e","f"], range(1,6)):
    eval("{0} = int(sys.argv[{1}])".format(i, j))

可以更好地表述为:

代码语言:javascript
运行
复制
a, b, c, d, e, f = map(int, sys.argv[1:7])

或作为:

代码语言:javascript
运行
复制
a, b, c, d, e, f = (int(x) for x in sys.argv[1:7])

注意,原代码的范围错了,应该是范围(1,7)。

票数 2
EN

Stack Overflow用户

发布于 2014-11-13 22:41:10

首先(正如其他人所指出的),在这里评估代码是完全不必要的(更不用说性能的影响了)。参见例如Ned's answer中的一种选择。

现在,关于错误本身:

https://docs.python.org/2/library/functions.html?highlight=eval#eval

表达式参数被解析并计算为Python表达式(从技术上讲,是一个条件列表),使用全局和本地字典作为全局和本地命名空间。

关键短语是“作为Python表达式”。赋值不是表达式,而是语句。有exec来执行语句。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26919774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档