python调用matlab函数 函数调用问题name 'new_fjcb' is not defined

Python运行的17个时新手常见错误小结
字体:[ ] 类型:转载 时间:
当初学 Python 时,想要弄懂 Python 的错误信息的含义可能有点复杂。这里列出了常见的的一些让你程序 crash 的运行时错误
1)忘记在 if , elif , else , for , while , class ,def 声明末尾添加 :(导致 “SyntaxError :invalid syntax”) 该错误将发生在类似如下代码中:
代码如下: if spam == 42 print('Hello!')
2)使用 = 而不是 ==(导致“SyntaxError: invalid syntax”) = 是赋值操作符而 == 是等于比较操作。该错误发生在如下代码中:
代码如下: if spam = 42: print('Hello!')
3)错误的使用缩进量。(导致“IndentationError:unexpected indent”、“IndentationError:unindent does not match any outer indetation level”以及“IndentationError:expected an indented block”) 记住缩进增加只用在以:结束的语句之后,而之后必须恢复到之前的缩进格式。该错误发生在如下代码中:
代码如下: print('Hello!') print('Howdy!') 或者: if spam == 42: print('Hello!') print('Howdy!') 或者: if spam == 42: print('Hello!')
4)在 for 循环语句中忘记调用 len() (导致“TypeError: 'list' object cannot be interpreted as an integer”) 通常你想要通过索引来迭代一个list或者string的元素,这需要调用 range() 函数。要记得返回len 值而不是返回这个列表。 该错误发生在如下代码中:
代码如下: spam = ['cat', 'dog', 'mouse'] for i in range(spam): print(spam[i])
5)尝试修改string的值(导致“TypeError: 'str' object does not support item assignment”) string是一种不可变的数据类型,该错误发生在如下代码中:
代码如下: spam = 'I have a pet cat.' spam[13] = 'r' print(spam)
而你实际想要这样做:
代码如下: spam = 'I have a pet cat.' spam = spam[:13] + 'r' + spam[14:] print(spam)
6)尝试连接非字符串值与字符串(导致 “TypeError: Can't convert 'int' object to str implicitly”) 该错误发生在如下代码中:
代码如下: numEggs = 12 print('I have ' + numEggs + ' eggs.')
而你实际想要这样做:
代码如下: numEggs = 12 print('I have ' + str(numEggs) + ' eggs.') 或者: numEggs = 12 print('I have %s eggs.' % (numEggs))
7)在字符串首尾忘记加引号(导致“SyntaxError: EOL while scanning string literal”) 该错误发生在如下代码中:
代码如下: print(Hello!') 或者: print('Hello!) 或者: myName = 'Al' print('My name is ' + myName + . How are you?')
8)变量或者函数名拼写错误(导致“NameError: name 'fooba' is not defined”) 该错误发生在如下代码中:
代码如下: foobar = 'Al' print('My name is ' + fooba) 或者: spam = ruond(4.2) 或者: spam = Round(4.2)
9)方法名拼写错误(导致 “AttributeError: 'str' object has no attribute 'lowerr'”) 该错误发生在如下代码中:
代码如下: spam = 'THIS IS IN LOWERCASE.' spam = spam.lowerr()
10)引用超过list最大索引(导致“IndexError: list index out of range”) 该错误发生在如下代码中:
代码如下: spam = ['cat', 'dog', 'mouse'] print(spam[6])
11)使用不存在的字典键值(导致“KeyError:‘spam'”) 该错误发生在如下代码中:
代码如下: spam = {'cat': 'Zophie', 'dog': 'Basil', 'mouse': 'Whiskers'} print('The name of my pet zebra is ' + spam['zebra'])
12)尝试使用Python关键字作为变量名(导致“SyntaxError:invalid syntax”) Python关键不能用作变量名,该错误发生在如下代码中:
代码如下:class = 'algebra'
Python3的关键字有:and, as, assert, break, class, continue, def, del, elif, else, except, False, finally, for, from, global, if, import, in, is, lambda, None, nonlocal, not, or, pass, raise, return, True, try, while, with, yield 13)在一个定义新变量中使用增值操作符(导致“NameError: name 'foobar' is not defined”) 不要在声明变量时使用0或者空字符串作为初始值,这样使用自增操作符的一句spam += 1等于spam = spam + 1,这意味着spam需要指定一个有效的初始值。 该错误发生在如下代码中:
代码如下: spam = 0 spam += 42 eggs += 42
14)在定义局部变量前在函数中使用局部变量(此时有与局部变量同名的全局变量存在)(导致“UnboundLocalError: local variable 'foobar' referenced before assignment”) 在函数中使用局部变来那个而同时又存在同名全局变量时是很复杂的,使用规则是:如果在函数中定义了任何东西,如果它只是在函数中使用那它就是局部的,反之就是全局变量。 这意味着你不能在定义它之前把它当全局变量在函数中使用。 该错误发生在如下代码中:
代码如下: someVar = 42 def myFunction(): print(someVar) someVar = 100 myFunction()
15)尝试使用 range()创建整数列表(导致“TypeError: 'range' object does not support item assignment”) 有时你想要得到一个有序的整数列表,所以 range() 看上去是生成此列表的不错方式。然而,你需要记住 range() 返回的是 “range object”,而不是实际的 list 值。 该错误发生在如下代码中:
代码如下: spam = range(10) spam[4] = -1
也许这才是你想做:
代码如下: spam = list(range(10)) spam[4] = -1
(注意:在 Python 2 中 spam = range(10) 是能行的,因为在 Python 2 中 range() 返回的是list值,但是在 Python 3 中就会产生以上错误) 16)不错在 ++ 或者 -- 自增自减操作符。(导致“SyntaxError: invalid syntax”) 如果你习惯于例如 C++ , Java , PHP 等其他的语言,也许你会想要尝试使用 ++ 或者 -- 自增自减一个变量。在Python中是没有这样的操作符的。 该错误发生在如下代码中:
代码如下: spam = 1 spam++
也许这才是你想做的:
代码如下: spam = 1 spam += 1
17)忘记为方法的第一个参数添加self参数(导致“TypeError: myMethod() takes no arguments (1 given)”) 该错误发生在如下代码中:
代码如下: class Foo(): def myMethod(): print('Hello!') a = Foo() a.myMethod()
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具[Python学习] 专题一.函数的基础知识
最近才开始学习Python语言,但就发现了它很多优势(如语言简洁、网络爬虫方面深有体会) 我主要是通过《Python基础教程》和 &51CTO学院 智普教育的python视频 &学习,在看视频中老师讲述函数知识的
最近才开始学习语言,但就发现了它很多优势(如语言简洁、网络爬虫方面深有体会).我主要是通过《Python基础教程》和"51CTO学院 智普教育的python视频"学习,在看视频中老师讲述函数知识的时候觉得非常不错,所以就写了第一篇Python学习的文章分享给大家.主要内容:
1.Python安装与基本输入输出,print()函数和raw_input()函数简单用法.
2.我根据视频中学到的知识,讲解函数的基本知识:
(1).提供内部函数:字符串函数库、数学函数库、网络函数库、OS函数库
(2).第三方提供函数库:讲解如何安装httplib2第三方函数库,再做了个简单的网页爬虫例子
(3).用户自定义函数:讲解无返回类型、有形参、预设值参数等自定义函数
3.同时网络编程中与C#以前学过的进行了简单对比,发现python确实有很多优点,而且很方便强大.
PS:文章中引用了很多视频中的知识、书籍知识和自己的知识,感谢那些作者和老师,希望文章对大家有所帮助,才开始学习python知识,如果文章中有错误或不足之处,还请海涵,也希望大家提出意见与君共勉.勿喷~
一. Python安装及输入输出函数
python解释器在中可以内置使用安装,windows中需要去www.python.org官网downloads页面下载(如python-2.7.8.amd64.msi),安装Python集成开发环境(Python
Integrated Development Environment,IDLE)即可.运行程序输入">>>print 'hello world'"则python解释器会打印输出"hello world"字符串. 如下:
然后讲述Python程序的基本框架是"输入-处理-输出",而输入输出函数如下:
1.print()函数
函数用于输出或打印整型、浮点型、字符串数据至屏幕,如print(3)、print(12.5)、print('H').它输出变量格式"print(x)或print x",而且可以输出多个变量"print x,y,z".并且支持格式化输出数据,调用format()函数,其格式为:
print(format(val,format_modifier)) 其中val表示值,format_modifier表示格式字.
>>> print(12.5)
>>> print("eastmount")
#输出"123.46",6.2表示输出6位,小数点后精度2位,输出最后一位6是四舍五入的结果
>>> print(format(123.45678,'6.2f'))
#输出"口口口123",采用右对齐补空格方式输出总共6位
>>> print(format(123.45678,'6.0f'))
#输出"123."小数点后面9位,超出范围会自动补0
>>> print(format(123.45678,'6.9f'))
#输出"34.56%"表示打印百分率
>>> print(format(0.3456,'.2%'))
2.raw_input()函数
内建函数从sys.stdin接受输入,读取输入语句并返回string字符串.输入以换行符结束,通过help(raw_input)可以查找帮助,常见格式为:
s = raw_input([prompt]) 参数[prompt]可选,用于提示用户输入.
>>> str1 = raw_input("please input a string:")
please input a string:I love you
>>> print(str1)
I love you
#查看str1数据类型
>>> type(str1)
注意raw_input()与input()的区别:(1).input支持合法python表格式"abc",字符串必须用引号括起,否则会报错"NameError: name 'abc' is not defined",而raw_input()任何类型输入都可接受; (2).raw_input()将所有输入作为字符串,返回string,而input()输入纯数字时具有自己的特性,返回输入的数字类型int或float.举例解释如下:
#SyntaxError语法错误
>>> str1 = input("input:")
Traceback (most recent call last):
File "", line 1, in
File "", line 1, in
NameError: name 'abc' is not defined
#正确输入输出
>>> str1 = input("input:")
input:"I love you"
>>> print str1
I love you
#input纯数字 数据类型
>>> weight = input("weight:")
weight:12.5
>>> type(weight)
#raw_input 数据类型均为str
>>> age = raw_input("age:")
>>> type(age)
二. 函数之系统提供内部函数
python提供的系统内部库函数主要讲述一下四种类型:(引自视频,只简单介绍)
1.字符串函数库
通过help(str)可以查询字符串函数库,其中查询过程中"-More-"输入回车实现滚动信息,输出"q"退出帮助(Quit).字符串函数大家都比较熟悉,无论C\C++\C#\都学过很多,而且基本大同小异.如:
islower()函数判断字符串是否大小写,一个大写返回False.前面使用的format()函数、求字符串长度len()函数均属于字符串函数库,help(str.replace)可以查询具体函数用法,该函数用于新字符串替换旧字符串.
#判断字符串是否小写
>>> str1 = "Eastmount"
>>> str1.islower()
#字符串替换
>>> str2 = 'adfababdfab'
>>> str2.replace('ab','AB')
'adfABABdfAB'
#字符串求长度
>>> print(len(str2))
2.数学函数库
使用数学函数库时需要注意的是导入库"import math",该库中函数我们也非常熟悉,如sin()求正弦,cos()求余弦,pow(x,y)计算x的y次幂,如pow(3,4)=3*3*3*3,python中也可以使用3**4表示.help(math)中可以查看详细信息,而且库中定义了两个常数DATA:
e = 2.718281... pi = 3....
#导入math库
>>> import math
>>> print math.pi
#计算sin30度
>>> val = math.sin(math.pi/6)
>>> print val
>>> math.pow(3,4)
>>> help(math.pow)
Help on built-in function pow in module math:
Return x**y (x to the power of y).
3.网络编程库
系统提供内部库函数中网络编程库,我此处仅仅举个简单例子,socket(套接字网络编程)获取主机ip地址这是非常常见的运用,我将与C#网络编程进行简单对比.后面的博文中将详细讲述python网络编程.
>>> import socket
>>> baiduip = socket.gethostbyname('')
>>> print baiduip
61.135.169.125
其中socket编程很常用,gethostbyname()返回指定主机ip,而C#中获取百度网址的ip地址代码如下所示.代码中可能会出现"警告:Dns.GetHostByName()函数已过时",可替换为IPHostEntry myHost = Dns.GetHostEntry().输出:
61.135.169.121
61.134.169.125
//引用新命名空间
using System.N
namespace GetIp
class Program
static void Main(string[] args)
//获取DNS主机名的DNS信息
IPHostEntry myHost = Dns.GetHostByName("");
IPAddress[] address = myHost.AddressL
for (int index = 0; index < address.L index++)
Console.WriteLine(address[index]);
Console.ReadKey();
4.操作系统(OS)函数库
操作系统库函数引用"import os",举例获取当前工作路径和先死当前路径下的文件和目录.使用os.system("cls")可以实现清屏功能.安装python目录Lib文件夹下含有很多py库文件供使用.
>>> import os
#获取当前工作路径
>>> current = os.getcwd()
>>> print current
G:\software\Program software\Python\python insert
#获取当前路径下的文件和目录
>>> dir = os.listdir(current)
>>> print dir
[&#39;DLLs&#39;, &#39;Doc&#39;, &#39;h2.txt&#39;, &#39;include&#39;, &#39;Lib&#39;, &#39;libs&#39;, &#39;LICENSE.txt
&#39;, &#39;NEWS.txt&#39;, &#39;python.exe&#39;, &#39;pythonw.exe&#39;, &#39;README.txt&#39;, &#39;tcl&#39;, &#39;Tools&#39;]
三. 函数之第三方提供函数库及安装httplib2模块过程
(一).安装第三方函数库httplib2过程
Python中第三方开源项目中提供函数库供我们使用,比如使用httplib2库函数.在Linux中直接使用"easy_install httplib2"搜索自动安装,Windows下python开发工具IDLE里安装httplib2模块的过程如下(其他模块类&#20284;).
1.下载httplib2模块"/p/httplib2/"到指定目录,解压压缩包"httplib2_0.8.zip"到某目录下,如果该网址google访问失败,可以到此处下载:
2.配置python运行环境
右键"计算机"->"属性"->在"系统"中选择"高级系统设置"->在"系统属性"中"高级"选择"环境变量"
在系统环境变量Path后添加python安装目录"G:\software\Program software\Python\python insert"
3.在下安装httpLib2
管理员模式运行cmd,利用cd命令进入httplib2_0.8.zip解压目录,输入"python settup.py install",如下图所示安装成功.
4.使用httplib2
如果httplib2库函数没有安装成功,"import httplib2"会提示错误"ImportError: No module named httplib2".否则安装成功,举例如下.看参考更多"Python - 熟悉httplib2"
import httplib2
#获取HTTP对象
h = httplib2.Http()
#发出同步请求并获取内容
resp, content = h.request("http://www.csdn.net/")
#显示返回头信息
print resp
#显示网页相关内容
print content
输出头信息:
{&#39;status&#39;: &#39;200&#39;, &#39;content-length&#39;: &#39;;, &#39;content-location&#39;: &#39;http://www.csdn.net/&#39;, .... &#39;Fri, 05 Sep :24 GMT&#39;, &#39;content-type&#39;: &#39;text/ charset=utf-8&#39;}
(二).简单网页爬虫示例
使用第三方函数库时的具体&#26684;式为module_name.method(parametes) 第三方函数名.方法(参数).
讲述一个引用web库,urllib库访问公网上网页,webbrowser库调用操作,下载csdn官网内容并通过浏览器显示的实例.
import urllib
import webbrowser as web
content = urllib.urlopen(url).read()
open("soso.html","w").write(content)
web.open_new_tab("soso.html")
它会输出True并在浏览器中打开下载的静态网页.引用import webbrowser as web使用web,也可以直接引用,使用时"module_name.method"即可.读者可以对比我的C#文章"C#
网络编程之网页简单下载实现".
content = urllib.urlopen(url).read()表示打开url并读取赋&#20540;
open("soso.html","w").write(content)表示在python安装目录写静态soso.html文件
web.open_new_tab("soso.html")表示打开该静态文件新标签.
同样可以使用web.open_new_tab('')直接在浏览器打开动态网页.效果如下图所示:
四. 函数之自定义函数
1.无返回&#20540;自定义函数
其基本语法&#26684;式如下:
def function_name([parameters]):
函数名([参数]),其中参数可有可无
(TAB) statement1
(TAB) statement2
注意:(1).自定义函数名后面的冒号(:)不能省略,否则报错"invalid syntax",而且无需像C语言一样加{};
(2).函数里每条语句前都有缩进TAB,否则会报错"There's an error in your programs:expected an indented block",它的功能相当于区分函数里的语句与函数外的语句.
举例:打开IDLE工具->点击栏"File"->New File新建文件->命名为test.py文件,在test文件里添加代码如下.
def fun1():
print &#39;Hello world&#39;
print &#39;by eastmount csdn&#39;
print &#39;output&#39;
def fun2(val1,val2):
print val1
print val2
fun2(8,15)
保存,在test.py文件里点击Run->Run Module.输出结果如下图所示,其中fun1()函数无形参自定义函数,fun2(val1,val2)是有形参自定义函数,fun2(8,15)为函数的调用,实参8和15.
2.有返回&#20540;自定义函数
其基本语法&#26684;式如下:
def funtion_name([para1,para2...paraN])
statement1
statement2
return value1,value2...valueN
返回&#20540;支持一个或多个返回,需要注意的是自定义函数有返回&#20540;,主调函数就需要接受&#20540;(接受返回的结果).同时在定义变量时可能sum这些可能是关键字(注意颜色),最好使用不是关键字的变量.举例:
def fun3(n1,n2):
print n1,n2
n = n1 + n2
m = n1 - n2
p = n1 * n2
q = n1 / n2
e = n1 ** n2
return n,m,p,q,e
a,b,c,d,e = fun3(2,10)
print &#39;the result are &#39;,a,b,c,d,e
re = fun3(2,10)
输出结果如下,其中需要注意的是参数一一对应,在除法中2/10=0,**幂运算2的10次方=1024.而使用re=fun3(2,10)直接输出的结果成为元组,后面会详细讲述,(12,-8,20,0,1024)元组中re[0]存储12,re[1]存储-8,依次~
the result are
12 -8 20 0 1024
(12, -8, 20, 0, 1024)
3.自定义函数参数含预定义
预设&#20540;的基本&#26684;式如下:
def function_name(para1,para2...parai=default1...paran=defaultn)
statement1
statement2
return value1,value2...valuen
其中需要注意的是预定义&#20540;得参数不能先于无预定义&#20540;参数,举个例子讲解.
def fun4(n1,n2,n3=10):
print n1,n2,n3
n = n1 + n2 + n3
re1 = fun4(2,3)
print &#39;result1 = &#39;,re1
re2 = fun4(2,3,5)
print &#39;result2 = &#39;,re2
输出结果如下图所示,预定义的参数在调用时,实参可以省略,也可以替换默认定义的预定义&#20540;.
其中如果函数定义为def fun4(n3=10,n2,n1)就会报错"non-default argument follows default argument"(没预定义的参数在预定义参数的后面),所以定义函数时需要注意该点.
同时需要注意函数调用时的赋&#20540;顺序问题,最好采用一对一复制,也可以函数调用中给出具体形参进行赋&#20540;,但需要注意的是在函数调用过程中(使用函数时),有预定义&#20540;的参数不能先于无预定义&#20540;参数被赋&#20540;.
如例子中自定义函数def fun4(n1,n2,n3=10),在调用时可以:
(1).s=fun4(2,3)省略预定义参数,它是一对一赋&#20540;,其中n1赋&#20540;2、n2赋&#20540;3、n3赋&#20540;10(预定义)
(2).s=fun4(4,n2=1,n3=12)它也是一对一赋&#20540;,而且预定义&#20540;n3替换为12
(3).s=fun4(n2=1,n1=4,n3=15)它的顺序与定义函数没有对应,但是调用时给出具体对应也行
下面的情况就会出现所述的"有预定义&#20540;的参数先于无预定义&#20540;参数被赋&#20540;"错误:
(1).s=fun4(n3=12,n2=1,4)此时会报错"non-keyword arg after keyword arg",它不能指定n1=4,就是没有指定预定&#2在有预定&#2,n2=1之后,如果改成s=fun4(4,n2=1,n3=12)或s=fun4(4,n3=12,n2=1)即可.
(2).s=fun4(4,n1=2)此时也会报错"TypeError: fun4() got multiple values for keyword argument 'n1'",它不能指定n1=2&n2=4,而是n1会赋&#20540;多个.
所以,最好还是一一对应的调用函数,平时写程序没有这样去刁难自己,对应即可
总结:文章从系统提供的内部函数、第三方提供函数库&#43;简单爬出代码及安装httplib2模块过程和用户自定函数三个方面进行讲述.文章中如果有错误或不足之处,海涵~最后感谢那个视频老师和上述博主、书籍老师及me.
Python 公开课视频链接 /course/course_id-527.html
最后祝大家中秋节快乐!全家团圆,聚聚玩玩.
(By:Eastmount
夜5点 原创CSDN http://blog.csdn.net/eastmount/)查看: 582|回复: 9
Tkinter里没有messagebox, 在Python2.5里,要从 tkMessageBox导入, Python3里不是很清楚。 from tkMessageBox import showwarning showwarning('open', 'xxx')
没问题,可能是字符缩进格式问题吧,仔细检查一下: class MyClass(object): def __init(self): pass i=12345 def f(self): return &hello word& def main(): passif __name__=='__main__' : print(MyClass().f())
花草味奶茶
python3.x系列不再有 raw_input 函数。3.x中 input 和从前的 raw_input 等效,换吧。
#!/usr/bin/env python # -*- coding: utf-8 -*- import os ls = os.linesep #为os.linesep取了一个别名 当前平台的换行符 while True: fname = raw_input('input a file name to save filenames:%s' % ls) if os.path.exists(fname):#os.path.e...
推荐用IDE开发吧,想这样的依赖缺失错误,在编码的时候就会被提醒,不用等到执行时再郁闷。
就是说你语句中的runfile是未定义的,如果你是从别的地方看来的代码,那就去原来的代码里找找runfile的定义
str1=&g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj.&b=&& #可以添加这...
3.2.2取消了raw,现在统一用input,但是我很奇怪的是原来的input去哪里了?现在我的x=input(&x:&)里面的x不是数值而是字符,导致无法进行运算,该怎么办呢?
#!/usr/bin/env python # -*- coding: utf-8 -*- import os ls = os.linesep #为os.linesep取了一个别名 当前平台的换行符 while True: fname = raw_input('input a file name to save filenames:%s' % ls) if os.path.exists(fname):#os.path.e...
重新下这个模块安装试试 看提示,这个方法都没定义,应该是缺少文件了

我要回帖

更多关于 python如何调用函数 的文章

 

随机推荐