初学python,代码提示这种错误说是语法错误 代码0不懂啊求大神解释下

python学习笔记之调用eval函数出现invalid syntax错误问题
字体:[ ] 类型:转载 时间:
python是一门多种用途的编程语言,时常扮演脚本语言的角色。一般来说,python可以定义为面向对象的脚本语言,这个定义把面向对象的支持和面向脚本语言的角色融合在一起。很多时候,人们常常喜欢用“脚本”和不是语言来描述python的代码文件。
pytho的使用和分发完全是免费的,它是一种面向对象的语言,它的。它的类模块支持多态,操作符重载和多重继承等高级概念,并且以python特有的简洁的语法和类型,OOP十分易于使用。python内置了众多预编译并可移植的功能模块,这些功能模块叫做标准库(standard library)。python可以调用C和C++的库,可以被C和C++的程序调用,可以与java组件集成,可以和COM和.Net等框架进行通信,并且可以通过SOAP、XML-RPC和CORBA等接口与网络进行交互,所以,python绝不仅仅是一个独立的工具。
本来是想打算使用eval函数对变量进行赋值的,没想到出现了invalid syntax错误。源代码如下
In [2]: eval('a = 1')
File "&string&", line 1
SyntaxError: invalid syntax
  百度没百度到结果,最后在stackoverflow上找到了好的答案.
  作者的意思是,eval函数只负责对表达式进行处理,并没有赋值的功能,也就是说,eval函数只负责对你的输入进行输出,True还是False又或者是什么东西。但它本身是没有影响当前代码环境的能力的。如果我们想用来进行赋值,那么应该使用exec()函数。看代码:
In [3]: exec('a = 1')
  问题的解决方案已经供出了,那么我们现在再看看官方文档对这两个函数怎么说。
eval(expression, global=None, local=None)
&&&&& 参数是字符串和可选的global和local。global应当为一个字典文件,local应为一个映射对象。
  expression参数将被处理为一个python的表达式(严格来说,是一串条件语句),global和local参数将被用来当做全局和局部的命名空间。
exec(object[,global,[locals])
  这个函数能够为python提供动态的代码执行功能。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具3.5.1版本的Python上运行如下代码,显示有语法错误,求解答?
import math
def is_sqr(x):
r=int(math.sqrt(x))
return r*r==x
print filter(is_sqr, range(1, 101))
写下你的评论...
写下你的评论...
写下你的评论...
Copyright (C)
All Rights Reserved | 京ICP备 号-2python错误集@ - 简书
python错误集@
unexpected unident (无法预料的缩进)
print("i am ok %r" % "\n and you ")
这句没有顶格写,python依靠indent来缩进。要么全部用空格缩进,要么全部tab键,用有些编辑器(editplus)可以显示tab和空格的。Python对缩进要求很严格的。多行注释符号本身也需要注意缩进。下面的内容会根据上面的多行注释符号来判断缩进对齐是否正确。
多行注释不能嵌套,"""
'''都是多行注释,总是离得最近的认为是一对注释符。
"TypeError: not enough arguments for format string (格式化字符串)
1) %在python中一是格式化(format)输出,一是求余。print 格式化输出的时候,可以用%r表示任何输出对象,%s是字符串,%d是整数,%f是浮点数....2)在%的左侧放置一个字符串(格式化字符串),而右侧则放置希望格式化的值。可以使用一个值,如一个字符串或者数字,也可以使用多个值的元组或者字典。一般情况下使用元组;3)如果要在格式化字符串里面包括百分号,那么必须使用%%,这样Python就不会将百分号误认为是转换说明符了,如果需要转换的元组作为转换表达式的一部分存在,那么必须将它用圆括号括起来;4) %r 与 %s 区别:
print('i am ok %r',"\n and you?")
print('i am ok %s',"\n and you?")
%r 打印出来的是你写在脚本里的内容,%s 打印的是你应该看到的内容。r是原始字符串的标记符。
can't assign to literal(无法原义赋值)在赋值与输出中:
bok=234,face="red"
print ("hello %d %s." % (bok,face))
两赋值语句在一个物理行中不能写成逗号:bok=234,face="red" ;而应该写成:
bok,face=234,"red"
或者用分号:bok=234;face="red"
或者写成两个物理行:
face="red"
注意,与;的区别。
;就代表了两个逻辑行,
而,代表了前后形成一个元组。如果第一行后跟了逗号,就会出错:
face='red'
TypeError: %d format: a number is required, not tuple
sublime Text 显示程序成功,却没有输出结果?
print("i am ok %r" % "\n and you ")
File "E:\code\hello.py", line 12
[Finished in 0.3s]
自己在windows下的cmd中运行,程序却是成功输出,这是sublime txt3 没有检查出来。在idle中出现SyntaxError: invalid character in identifier(标识符)。最后仔细发现原来是字符的问题,一定要用英文字符,不要用中文字符。当时我用的是中文符号的“()”!这些一定要注意,中文的括号、引号,这些都会出很多问题!
can't multiply sequence by non-int of type 'str'
a=input("a number,please:")
print (a*a)
python2.x的input(prompt)相当于eval(raw_input(prompt)).而python3.x的input(prompt)则基本等价于raw_input(prompt),所以返回的是一个字符串.方法1:利用eval(), eval(input("a number,please:"))方法2:直接强制转换为整形如height = int(input("a number,please:"))
eval():将字符串str当成有效的表达式来求值并返回计算结果。"对字符串形式的表达式求值",就好像去掉两边的引号,直接在程序中执行引号里面的东西。
eval("a+1")
not all arguments converted during string formatting
&&&('1', '2')
print("the b is %s" % b)
&&& TypeError
print("the a is %s,b is %s"%a,b)
&&& TypeError
print("the b is %s" % (b,))
&&& the b is ('1', '2')
print("the b is %s %s" % b)
&&&the b is 1 2
print("the a is %s"% [1,2] )
&&&the a is [1, 2]
print("the a is %s"% ['1',2] )
&&&the a is ['1', 2]
元组格式化字符串:单独的b是一个元组,python会直接unpack b来格式化字符串。(b,)也是一个元组,python会unpack这个元组,然后取出值(即b)来格式化字符串。 直接用b的话,python取出来了两个元素来格式化字符串,后者使用(b,)的话,python直接取出了一个值b.%操作符的第二个操作对象如果不是一个元组,那么它就只格式化一个值,所以列表格式化成字符串,直接用!
a="hello."
print("the a is %s\n"a)
#这样会报错:invalid syntax,a之前少了一个逗号,
#打印出来逗号相当于一个空格了,所以最好打印a的方式是重新开一个print(a)
1)empty separator:
b=a.split('')
# error:在split(''),两个''里面没有分隔符的内容。
这是没有制定分隔符:如果你想把“hello,world”分隔开,那分隔符就是‘,’如果你想把“hello world”分隔开,那分隔符就是‘ ’如果你想把“hello:world”分隔开,那分隔符就是‘: ’分隔符就是两个单词中间的那个字符.
s="hello everyone how are you?"
u=s.split(" ")
# 返回一个新列表
#排序,返回值为none
print (' '.join(u))
#连接,返回一个新字符串
print (u[2:6])
split是把一个字符串分裂新生成一个列表,一个列表后才有pop. append等操作 ,
而 ' '.jion()是把一个列表返回一个字符串,原来的列表没有变。
2)'str' object has no attribute 'sorted' :(这个一般是调用出错,函数使用错)
def f1(a):
b=a.sorted()
# 字符串sorted方法调用错误,应该用return sorted(a)就行了,
#排序也可以用a.sort(), a内部改变,print(a)
a="i am very strong!"
b=a.pop(-1)
&&&AttributeError: 'str' object has no attribute 'pop'
因为pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。所以它操作的对象是一个列表,但是a是一个字符串调用f(a)时就发生错误了。可以用split把字符串分割成列表,注意调用时用f(a)也会抛出此错误,a是一个字符串哟,f1(a)才是列表,所以调用也要对应,f(f1(a))。
a="i am very strong!"
b=a.pop(-1)
def f1(a):
b=a.split(' ')
&&&i am very strong!
['i', 'am', 'very', 'strong!']
['i', 'am', 'very', 'strong!']
3)'str' object is not callable
str="i am ok!"
print (str(1))
#字符串是个列表,但是他的访问用str[i],而非()
cmd中出现 不是内部或外部命令,也不是可运行的程序或批处理文件1)要么是本身系统中的确没有此种可执行程序 -& 下载或安装此种程序,再记得确保PATH中包含对应路径。2)我的电脑-&属性-&高级-&环境变量-&系统变量中,找到 PATH,配置系统变量,注意一定要有分号。或者在不认识命令的这个命令行窗口, 输入 echo %PATH%,会显示当前这个窗口所用的环境变量PATH,如果Python 的路径不在其中的话,输入set PATH=%PATH%; C:\Python33。不过,这样你关闭这个窗口的时候,这个设置就失效了
print无法输出中文字符unicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position 81098: illegal multibyte sequence
如果你用python2.7,那么在源代码开头加上codeing:gb18030,这样会让你在windows下更自在,基本上不出错。如果你用的是python3,那么要输出到“控制台”,或者是输出到文件时均要编码。编码成"gb18030"比如这样:s="中文" print s.encode("gb18030")
编码问题:SyntaxError: Non-ASCII character程序中的编码错误,python默认是ascii模式,没有支持utf8,代码中出现了汉字,所以出现了错误。python源代码必须完全由ASCII集合组成,如果直接在python中添加中文注释的时候,python执行时会引发异常,告知非ASCII字符语法错误。解决方法就是告知python使用的编码方式,告知方法是在源文件的初始部分,而且必须放在第一行,否则不起作用!源代码文件第一行添加:#coding:gbk或#coding:utf-8或##-*- coding : gbk -*-
unexpected EOF while parsing可能是indent的问题,就是混用了空格和tab。如果是在pydev+eclipse下,运行然后输入数字,打个回车就会出现“SyntaxError:unexpected EOF while parsing”,所以只能用raw_input来代替。原因是回车,编译器都多读一个/r,一般按回车后,shells 会输入“/n”,但因为Eclipse控制台输入的是“/r/n”,python就不能很好的识别。
Could not find a version that satisfies the requirement pywin32Some insecure and unverifiable files were ignored (use --allow-unverified pywin32这是外部的库检索受到阻止了,或者一些模块的依赖库没有安装。输入:pip install pywin32 --allow-external pywin32 --allow-unverified pywin32,如果还是不行,则到官网去安装库。验证是否安装成功,可以在cmd中用xxx --version验证版本来验证。或者import xxx。
\在cmd命令行中根据不同版本设置不同的环境变量,如visual studio13的:SET
VS90COMNTOOLS=%VS120COMNTOOLS%
这种写法a = a()错误,管有没有括号,变量名和函数名不能相同。在函数调用中也容易出这种错误,那几要把变量定义成全局变量,才可以重复调用。
def PrintFileName(strFileName):
# 要修改成 global xxx
if xxx == 23:
print strFileName
PrintFileName("file")
原来在python的函数中和全局同名的变量,如果你有修改变量的值就会变成局部变量,在修改之前对该变量的引用自然就会出现没定义这样的错误了,如果确定要引用全局变量,并且要对它修改,必须加上global关键字。
程序运行没有结果输出
def func(x):
return x*x
map(func,range(6))
&&&没有结果
list(map(func,range(6)))
&&&没有结果
b=map(func,range(6))
&&&&map object at 0x&
a=list(map(func,range(5)))
&&&[0, 1, 4, 9, 16]
python3中,map、fliter改成了返回iterators了,免得吃掉太多內存,这在处理大数据中很有利,一般情況下用list comprehension,前面加个list,或者直接for循環。或者调用2to3模块:
python3的变动参见
注意:返回None的时候Python的交互式命令行也不显示结果。
range()函数,可以生成一个整数序列,再通过list()函数可以转换为list。
&&&range(0, 12)
list(range(12))
&&&[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
type(range(12))
&&& &class 'range'&
type(list(range(12)))
&&& &class 'list'&
TypeError: object() takes no parameters 初始化_init_,下面是两个双划线,所以为__init__!并且init不能写成int。
探索的丝绸之路

我要回帖

更多关于 python冒号语法错误 的文章

 

随机推荐