Python科学计算与数据处理-Python函数

上传人:努力****83 文档编号:239830127 上传时间:2024-02-22 格式:PPT 页数:71 大小:402.50KB
返回 下载 相关 举报
Python科学计算与数据处理-Python函数_第1页
第1页 / 共71页
Python科学计算与数据处理-Python函数_第2页
第2页 / 共71页
Python科学计算与数据处理-Python函数_第3页
第3页 / 共71页
点击查看更多>>
资源描述
oPython函数n函数的定义与调用n调用函数的形式n函数的参数n局部变量和全局变量n函数的注释说明n常用函数1函数的定义与调用o函数是一个能完成特定功能的代码块,可在程序中重复使用,减少程序的代码量和提高程序的执行效率。o在python中函数定义语法如下:ndeffunction_name(arg1,arg2,.):ostatementoreturnvalueo返回值不是必须的,如果没有return语句,则Python默认返回值None2函数的定义与调用o定义函数,通常使用def语句。o函数名可以是任何有效的Python标识符。o参数列表可以由多个、一个或零个参数组成。o圆括号是必不可少的,即使没有参数也不能没有它;不要忘记圆括号后面的冒号。o函数体一定要注意缩进。o“形参”和“实参”。oreturn语句的作用是结束函数调用,可以出现在函数体的任意位置。3def函数名(参数列表):函数体defadd1(x):x=x+1returnxdefadd1(x):x=x+1returnxadd1(1)2调用函数的形式o调用函数的一般形式是:o上例:o对于没有使用return语句的函数,它实际上也向调用者返回一个值,那就是None。o标准调用方式,传递的值按照形参定义的顺序相应地赋给它们。4函数名(参数表)add1(1)defmyadd():sum=1+1a=myadd()aprintaNone调用函数的形式o“关键字调用”方式,即在调用函数时同时给出形式参数和实际参数。o“关键字调用”方式在函数具有多个参数是非常有用,因为解释器能通过给出的关键字来匹配参数的值,所以这样就允许参数缺失或者不按定义函数时的形式参数的顺序提供实际参数。5defselect(x,y):让x年级y班的学生打扫卫生select(3,6)select(6,3)select(x=3,y=6)select(y=6,x=3)函数的参数o在定义函数时,我们可以用赋值符号给某些形参指定默认值,这样当调用该函数的时候,如果调用方没有为该参数提供值的话,则使用默认值。o如果调用该函数的时候为该参数提供了值的话,则使用调用方提供的值像这样的参数我们称之为缺省参数。o默认参数必须在所有标准参数之后定义。6deff(arg1,arg2=2,arg3=3):printarg1=,arg1printarg2=,arg2printarg3=,arg3函数的参数o带有缺省参数的函数:o用“关键字调用”方式调用带有缺省参数的函数:7f(10,arg3=10)arg1=10arg2=2arg3=10f(arg3=10,arg1=10)arg1=10arg2=2arg3=10f(10,arg2=10)arg1=10arg2=10arg3=3f(arg2=10,arg1=10)arg1=10arg2=10arg3=3deff(arg1,arg2=2,arg3=3):printarg1=,arg1printarg2=,arg2printarg3=,arg3f(10)arg1=10arg2=2arg3=3f(10,10)arg1=10arg2=10arg3=3f(10,10,10)arg1=10arg2=10arg3=10函数的参数o需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数.o加了星号(*)的变量名会存放所有未命名的变量参数。选择不多传参数也可。8deffunctionname(formal_args,*var_args_tuple):函数_文档字符串function_suitereturnexpression函数的参数9#可写函数说明defprintinfo(arg1,*vartuple):打印任何传入的参数print输出:printarg1forvarinvartuple:printvarreturn;printinfo(10)#调用printinfo函数输出:10printinfo(70,60,50)#以上实例输出结果:输出:706050函数的参数o在一个函数中对参数名赋值不影响调用者。o在一个函数中改变一个可变的对象参数会影响调用者,如列表,字典,数组等。10a=1deftest(a):a=a+1printatest(a)2a1#a值不变a=1b=1,2deftest(a,b):a=5b0=4printa,btest(a,b)54,2a1b4,2#b值已被更改函数的参数o参数是对象指针,无需定义传递的对象类型。11deftest(a,b):returna+btest(1,2)#数值型3test(a,b)#字符型abtest(12,11)#列表12,11匿名函数o用lambda关键词能创建小型匿名函数。oLambda函数能接收任何数量的参数但只能返回一个表达式的值。o匿名函数不能直接调用print,因为lambda需要一个表达式。olambda函数拥有自己的名字空间,且不能访问自有参数列表之外或全局名字空间里的参数。12lambdaarg1,arg2,.argn:expression匿名函数13#可写函数说明sum=lambdaarg1,arg2:arg1+arg2;#调用sum函数printValueoftotal:,sum(10,20)Valueoftotal:30printValueoftotal:,sum(20,20)Valueoftotal:40局部变量和全局变量o在一个函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用的变量我们称之为局部变量;o在一个文件顶部定义的变量可以供该文件中的任何函数调用,这些可以为整个程序所使用的变量称为全局变量。o如想在局部作用域中改变全局作用域的对象,必须使用global关键字。#coding=utf-8globalInt=9#定义一个函数defmyAdd():localInt=3globalgigi=7#在函数中定义一个局部变量returnglobalInt+localInt#测试变量的局部性和全局性printmyAdd()printglobalIntprintgiprintlocalInt14局部变量和全局变量15globalInt=9defmyAdd():localInt=3globalgigi=7returnglobalInt+localIntprintmyAdd()12printglobalInt9printgi7printlocalIntNameErrorNameError:namelocalIntisnotdefined函数的注释说明文档字符串o在函数定义后紧跟的字符串会被认为是函数的说明,使用help(函数名)可显示出来。oimporttestohelp(add2)o显示_doc_属性defadd2(a,b):addtwoitemtogetherreturn(a+b)if_name_=_main_:printadd2(1,2)printadd2(123,45)importtestdir(test)_builtins_,_doc_,_file_,_name_,add2help(test.add2)Helponfunctionadd2inmoduletest:add2(a,b)addtwoitemtogethertest.add2(3,7)pythontest.py(cmd环境)31234516help()help_builtin_常用函数1/3oabs(x):abs()返回一个数字的绝对值。如果给出复数,返回值就是该复数的模。ocallable(object):callable()函数用于测试对象是否可调用,如果可以则返回1(真);否则返回0(假)。可调用对象包括函数、方法、代码对象、类和已经定义了“调用”方法的类实例。17printabs(-100)100printabs(1+2j)2.2360679775a=123printcallable(a)0printcallable(chr)1常用函数1/3ocmp(x,y):cmp()函数比较x和y两个对象,并根据比较结果返回一个整数,如果xy,则返回1,如果x=y则返回0。【3中已经不用了,可用(ab)-(abool测试对象类型isinstance(a,str)18a=1b=2c=2printcmp(a,b)-1printcmp(b,a)1printcmp(b,c)0a=isinstancetestb=1234isinstance(a,str)Trueisinstance(a,int)Falseisinstance(b,str)Falseisinstance(b,int)True19defdisplayNumType(num):printnum,is,ifisinstance(num,(int,long,float,complex):printanumberoftype:,type(num)._name_else:printnotanumberatall!【3中已经没有long了】displayNumType(-69)displayNumType(9999999999999999999999999L)displayNumType(565.8)displayNumType(-344.3+34.4j)displayNumType(xxx)常用函数2/3odivmod(x,y):divmod(x,y)函数完成除法运算,返回商和余数。opow(x,y,z):pow()函数返回以x为底,y为指数的幂。如果给出z值,该函数就计算x的y次幂值被z取模的值。olen(object)-integer:len()函数返回字符串和序列的长度。omin(x,y,z.):返回序列或参数的最小值omax(x,y,z.):返回序列或参数的最大值20divmod(10,3)(3,1)divmod(9,3)(3,0)printpow(2,4)16printpow(2,4,2)0printpow(2.4,3)13.824常用函数3/3orange(lower,stop,step):range()函数可按参数生成连续的有序整数列表。oround(x,n):round()函数返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数。otype(obj):type()函数可返回对象的数据类型。oxrange(lower,stop,step):xrange()函数与range()类似,但xrnage()并不创建列表,而是返回一个xrange对象,它的行为与列表相似,但是只在需要时才计算列表值,当列表很大时,这个特性能节省内存。o【3里面xrange取消了,就是range()】21a=xrange(10)printa00printa22类型转换函数数值型ofloat(x):把一个数字或字符串转换成浮点数。ohex(x):把整数转换成十六进制数。ooct(x):把整数转换成八进制数。oint(x,base):把数字和字符串转换成一个整数,base为可选的基数。ocomplex(real,imaginary):complex()函数可把字符串或数字转换为复数。ncomplex(“2+1j”)、complex(2,1)olong(x,base)long()函数把数字和字符串转换成长整数,base为可选的基数。22complex(2L,1)(2+1j)long(123)123L类型转换函数字符串ochr(i):chr()函数返回ASCII码对应的字符串oord(x):ord()函数返回一个字符串参数的ASCII码或Unicode值。ostr(obj):str()函数把对象转换成可打印字符串。23printchr(65)+chr(66)ABord(a)97ord(ua)97str(3+2j)(3+2j)类型转换函数序列对象olist(x):list()函数可将序列对象转换成列表otuple(x):tuple()函数把序列对象转换成tuple24list(helloworld)h,e,l,l,o,w,o,r,l,dlist(1,2,3,4)1,2,3,4tuple(helloworld)(h,e,l,l,o,w,o,r,l,d)tuple(1,2,3,4)(1,2,3,4)序列操作函数o常用函数中的len()、max()和min()同样可用于序列.ofilter(function,list):调用filter()时,它会把一个函数应用于序列中的每个项,并返回该函数返回真值时的所有项,从而过滤掉返回假值的所有项。omap(function,list,list):map()函数把一个函数应用于序列中所有项,并返回一个列表。o【3中需要用list(filter()ormap()】25defis_odd(n):returnn%2=1filter(is_odd,1,2,4,5,6,9,10,15)#结果:1,5,9,15deff(x):.returnx*x.map(f,1,2,3,4,5,6,7,8,9)1,4,9,16,25,36,49,64,81序列操作函数oreduce(function,seq,init)reduce()函数获得序列中前两个项,并把它传递给提供的函数,获得结果后再取序列中的下一项,连同结果再传递给函数,以此类推,直到处理完所有项为止。ozip(seq,seq,.)zip()函数可把两个或多个序列中的相应项合并在一起,并以元组的格式返回它们,在处理完最短序列中的所有项后就停止。26importoperatorreduce(operator.mul,2,3,4,5)#(2*3)*4)*5120reduce(operator.mul,2,3,4,5,2)#(2*2)*3)*4)*5240zip(1,2,3,4,5,7,8,9)(1,4,7),(2,5,8)zip(1,2,3,4,5)#如果参数是一个序列,则zip()会以一元组的格式返回每个项(1,),(2,),(3,),(4,),(5,)oPython模块n模块简介n模块的_name_n创建模块ndir()函数n包(package)27模块简介o模块是最高级别的程序组织单元,它将程序代码和数据封装起来以便重用。o模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。o模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用python标准库的方法。28模块简介oimportsys引入python标准库中的sys.py模块;这是引入某一模块的方法。o2、sys.argv是一个包含命令行参数的列表。o3、sys.path包含了一个Python解释器自动查找所需模块的路径的列表。29#!/usr/bin/python#Filename:using_sys.pyimportsysprintThecommandlineargumentsare:foriinsys.argv:printiprintnnThePYTHONPATHis,sys.path,npythonusing_sys.pyweareargumentsThecommandlineargumentsare:using_sys.pyweareargumentsThePYTHONPATHis/home/swaroop/byte/code,模块简介o搜索路径被存储在sys模块中的path变量,做一个简单的实验,在交互式解释器中o作为环境变量,PYTHONPATH由装在一个列表里的许多目录组成。PYTHONPATH的语法和shell变量PATH的一样。在Windows,典型的PYTHONPATH如下:30importsyssys.pathsys.path.append(E:pythontry)模块简介ofrom.import语句n如果你想要直接输入argv变量到你的程序中(避免在每次使用它时打sys.),那么你可以使用fromsysimportargv语句。n如果你想要输入所有sys模块使用的名字,那么你可以使用fromsysimport*语句。这对于所有模块都适用。n一般说来,应该避免使用from.import而使用import语句,因为这样可以使你的程序更加易读,也可以避免名称的冲突。31模块的_name_o当一个模块被第一次输入的时候,这个模块的主块将被运行。假如只想在程序本身被使用的时候运行主块,而在它被别的模块输入的时候不运行主块,我们该怎么做呢?这可以通过模块的_name_属性完成。32#!/usr/bin/python#Filename:using_name.pyif_name_=_main_:printThisprogramisbeingrunbyitselfelse:printIambeingimportedfromanothermodule模块的_name_o每个Python模块都有它的_name_,如果它是_main_,这说明这个模块被用户单独运行,我们可以进行相应的恰当操作。33!Pythonusing_name.py/runusing_name.pyThisprogramisbeingrunbyitself#在python环境中importusing_nameIambeingimportedfromanothermodule创建模块o每个Python程序也是一个模块。你已经确保它具有.py扩展名了。34#!/usr/bin/python#-*-coding:utf-8-*-#Filename:mymodule.pydefsayhi():printHi,thisismymodulespeaking.version=0.1#Endofmymodule.py创建模块35o注意使用了相同的点号来使用模块的成员。#!/usr/bin/python#Filename:mymodule_demo.pyimportmymodulemymodule.sayhi()printVersion,mymodule.version!pythonmymodule_demo.pyHi,thisismymodulespeaking.Version0.1创建模块o下面是一个使用from.import语法的版本。输出与mymodule_demo.py完全相同。36#!/usr/bin/python#Filename:mymodule_demo2.pyfrommymoduleimportsayhi,version#Alternative:#frommymoduleimport*sayhi()printVersion,version!pythonmymodule_demo2.pyHi,thisismymodulespeaking.Version0.1dir()函数o内置的函数dir()可以找到模块内定义的所有名称。以一个字符串列表的形式返回:o如果没有给定参数,那么dir()函数会罗列出当前定义的所有名称。37importmymoduledir(mymodule)_builtins_,_doc_,_file_,_name_,_package_,sayhi,version包(package)opackage包是一组module的集合,一个文件夹下面只要有个_init_.py文件,这个文件夹就可以看作是一个包,用以下方法创建一个包n先在当前目录创建一个目录testpackagen在testpackage下创建一个空文件_init_.pyn在testpackage中创建一个testmodule.py,里面编写任意代码。n启动Python,运行:38 import testpackage.testmodule testpackage.testmodule.sayhi()Hi,this is mymodule speaking.包(package)o包是一种组织模块的方法,提供了一个命名空间,防止发生名字冲突。o包中还可以有包,所以这种方式可以很好的组织一个树状结构,用来管理多个模块。39o输入输出ninput和printn输出格式美化n读和写文件40input和printo在很多时候,程序会需要与用户交互。程序会从用户那里得到输入,然后打印一些结果。我们可以分别使用input、raw_input和print语句来完成这些功能。41 name=raw_input(Pleaseinputyourname:n)print(Hello,name)name=input(Pleaseinputyourname:n)print(Hello,name)raw_input_B=raw_input(raw_input:)raw_input:123type(raw_input_B)input_B=input(input:)input:123type(input_B)输出格式美化Python两种输出值的方式:表达式语句和print()函数。(第三种方式是使用文件对象的write()方法)o如果你希望输出的形式更加多样,可以使用str.format()函数来格式化输出值。o如果你希望将输出的值转成字符串,可以使用repr()或str()函数来实现。nstr()函数返回一个用户易读的表达形式。nrepr()产生一个解释器易读的表达形式。42输出格式美化43s=Hello,world.str(s)repr(s)str(1/7)str(1.0/7)x=10*3.25y=200*200s=Thevalueofxis+repr(x)+,andyis+repr(y)+.print(s)#repr()函数可以转义字符串中的特殊字符hello=hello,worldnhellos=repr(hello)print(hellos)#repr()的参数可以是Python的任何对象repr(x,y,(spam,eggs)输出格式美化ostr.format()的基本使用如下:n括号及其里面的字符(称作格式化字段)将会被format()中的参数替换。在括号中的数字用于指向传入对象在format()中的位置,如下所示:44print(Wearethewhosay!.format(knights,Ni)WearetheknightswhosayNi!print(0and1.format(spam,eggs)spamandeggsprint(1and0.format(spam,eggs)eggsandspam输出格式美化n如果在format()中使用了关键字参数,那么它们的值会指向使用该名字的参数。n位置及关键字参数可以任意的结合:45print(Thisfoodisadjective.format(food=spam,adjective=absolutelyhorrible)Thisspamisabsolutelyhorrible.print(Thestoryof0,1,andother.format(Bill,Manfred,other=Georg)ThestoryofBill,Manfred,andGeorg.输出格式美化n!a(使用ascii(),!s(使用str()和!r(使用repr()可以用于在格式化某个值之前对其进行转化:n可选项:和格式标识符可以跟着字段名。这就允许对值进行更好的格式化。下面的例子将Pi保留到小数点后三位:46importmathprint(ThevalueofPIisapproximately.format(math.pi)ThevalueofPIisapproximately3.14159265359.print(ThevalueofPIisapproximately!r.format(math.pi)ThevalueofPIisapproximately3.141592653589793.importmathprint(ThevalueofPIisapproximately0:.3f.format(math.pi)ThevalueofPIisapproximately3.142.输出格式美化n在:后传入一个整数,可以保证该域至少有这么多的宽度。用于美化表格时很有用。47table=Sjoerd:4127,Jack:4098,Dcab:7678forname,phoneintable.items():print(0:10=1:10d.format(name,phone)Jack=4098Dcab=7678Sjoerd=4127输出格式美化n如果你有一个很长的格式化字符串,而你不想将它们分开,那么在格式化时通过变量名而非位置会是很好的事情。最简单的就是传入一个字典,然后使用方括号来访问键值:n也可以通过在table变量前使用*来实现相同的功能:48print(Jack:Jack:d;Sjoerd:Sjoerd:d;Dcab:Dcab:d.format(*table)Jack:4098;Sjoerd:4127;Dcab:8637678table=Sjoerd:4127,Jack:4098,Dcab:8637678print(Jack:0Jack:d;Sjoerd:0Sjoerd:d;Dcab:0Dcab:d.format(table)Jack:4098;Sjoerd:4127;Dcab:8637678输出格式美化o旧式字符串格式化旧式字符串格式化%操作符也可以实现字符串格式化。它将左边的参数作为类似sprintf()式的格式化字符串,而将右边的代入,然后返回格式化后的字符串.因为str.format()比较新的函数,大多数的Python代码仍然使用%操作符。但是因为这种旧式的格式化最终会从该语言中移除,应该更多的使用str.format().49importmathprint(ThevalueofPIisapproximately%5.3f.%math.pi)ThevalueofPIisapproximately3.142.读和写文件oopen()将会返回一个file对象,基本语法格式如下:n第一个参数为要打开的文件名。n第二个参数描述文件如何使用的字符。mode可以是r如果文件只读,w只用于写(如果存在同名文件则将被删除),和a用于追加文件内容;所写的任何数据都会被自动增加到末尾.r+同时用于读写。mode参数是可选的;r将是默认值。50open(filename,mode)读和写文件nf.write(string)将string写入到文件中51#f=file(foo.txt,w)f=open(foo.txt,w)f.write(Python是一个非常好的语言。n是的,的确非常好!n)f.close()f=open(foo.txt,r“)str=f.read()print(str)f.close()读和写文件nf.read(size),读取数据,然后作为字符串或字节对象返回。size是一个可选的数字类型的参数。当size被忽略了或者为负,那么该文件的所有内容都将被读取并且返回。nf.readline()会从文件中读取单独的一行。换行符为n。f.readline()如果返回一个空字符串,说明已经已经读取到最后一行。52f=open(foo.txt,r)str=f.readline()print(str)f.close()读和写文件nf.tell()返回文件对象当前所处的位置,它是从文件开头开始算起的字节数。nf.seek()如果要改变文件当前的位置,可以使用f.seek(offset,from_what)函数。ofrom_what的值,如果是0表示开头,如果是1表示当前位置,2表示文件的结尾,例如:seek(x,0):从起始位置即文件首行首字符开始移动x个字符seek(x,1):表示从当前位置往后移动x个字符seek(x,2):表示从文件的结尾往前移动x个字符from_what值为默认为0,即文件开头53读和写文件opickle模块python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储。通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。有了pickle这个对象,就能对file以读取的形式打开:54pickle.dump(obj,file,protocol)x=pickle.load(file)读和写文件n使用pickle模块将数据对象保存到文件55importpickledata1=a:1,2.0,3,4+6j,b:(string,uUnicodestring),c:Noneselfref_list=1,2,3selfref_list.append(selfref_list)output=open(data.pkl,wb)pickle.dump(data1,output)#Pickledictionaryusingprotocol0.pickle.dump(selfref_list,output,-1)#Picklethelistusingthehighestprotocolavailable.output.close()读和写文件n使用pickle模块从文件中重构python对象56importpprint,picklepkl_file=open(data.pkl,rb)data1=pickle.load(pkl_file)pprint.pprint(data1)a:1,2.0,3,(4+6j),b:(string,uUnicodestring),c:Nonedata2=pickle.load(pkl_file)pprint.pprint(data2)1,2,3,pkl_file.close()o异常处理nPython错误和异常n异常处理n异常使用57Python错误和异常Python有两种错误很容易辨认:语法错误和异常。o语法错误语法错误Python的语法错误或者称之为解析错。这个例子中,函数print()被检查到有错误,是它前面缺少了一个冒号(:)。语法分析器指出了出错的一行,并且在最先找到的错误的位置标记了一个小小的箭头。58whileTrueprint(Helloworld)File,line1whileTrueprint(Helloworld)SyntaxError:invalidsyntaxPython错误和异常o异常异常即便Python程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。大多数的异常都不会被程序处理,都以错误信息的形式展现在这里:5910*(1/0)-ZeroDivisionErrorTraceback(mostrecentcalllast)in()-110*(1/0)ZeroDivisionError:integerdivisionormodulobyzeroPython错误和异常异常以不同的类型出现,这些类型都作为信息的一部分打印出来。错误信息的前面部分显示了异常发生的上下文,并以调用栈的形式显示具体信息。604+spam*3-NameErrorTraceback(mostrecentcalllast)in()-14+spam*3NameError:namespamisnotdefined2+2-TypeErrorTraceback(mostrecentcalllast)in()-12+2TypeError:cannotconcatenatestrandintobjects异常处理Python的异常处理能力是很强大的,可向用户准确反馈出错信息。o方式一:try语句:n1、使用try和except语句来捕获异常61try:blockexceptexception,data:blocktry:blockexceptexception,data.:blockelse:block异常处理该种异常处理语法的规则是:n执行try下的语句,如果引发异常,则执行过程会跳到第一个except语句。n如果第一个except中定义的异常与引发的异常匹配,则执行该except中的语句。n如果引发的异常不匹配第一个except,则会搜索第二个except,允许编写的except数量没有限制。n如果所有的except都不匹配,则异常会传递到下一个调用本代码的最高层try代码中。n如果没有发生异常,则执行else块代码。62异常处理捕获到的IOError错误的详细原因会被放置在对象e中,然后运行该异常的except代码块。使用except子句需要注意的事情,就是多个except子句截获异常时,如果各个异常类之间具有继承关系,则子类应该写在前面,否则父类将会直接截获子类异常。放在后面的子类异常也就不会执行到了。63fname=raw_input(Enterfilename:)try:fobj=open(fname,r)exceptIOError,e:print*fileopenerror:,eelse:foreachLineinfobj:printeachLine,fobj.close()异常处理n2、使用try跟finally:该语句的执行规则是:执行try下的代码。如果发生异常,在该异常传递到下一级try时,执行finally中的代码。如果没有发生异常,则执行finally中的代码。第二种try语法在无论有没有发生异常都要执行代码的情况下是很有用的。例如在python中打开一个文件进行读写操作,在操作过程中不管是否出现异常,最终都是要把该文件关闭的。这两种形式相互冲突,使用了一种就不允许使用另一种,而功能又各异。64try:blockfinally:blocktry语句分句形式65分句形式分句形式分句形式分句形式说明说明说明说明except:except:捕获所有异常类型捕获所有异常类型except name:except name:只捕获指定类型异常只捕获指定类型异常except name,value:except name,value:捕获所列异常,并获得抛出的异常对捕获所列异常,并获得抛出的异常对象象except(name1,name2):except(name1,name2):捕获任何列出类型的异常捕获任何列出类型的异常except(name1,name2),value:except(name1,name2),value:捕获任何列出类型的异常,并获得抛捕获任何列出类型的异常,并获得抛出的异常对象出的异常对象else:else:如何没有异常发生,则运行如何没有异常发生,则运行finally:finally:不管有没有异常,都运行此代码块不管有没有异常,都运行此代码块异常处理异常处理o方式二:抛出异常抛出异常Python使用raise语句抛出一个指定的异常。raise唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是Exception的子类)。66raiseNameError(HiThere)-NameErrorTraceback(mostrecentcalllast)in()-1raiseNameError(HiThere)NameError:HiThere异常处理如果你只想知道这是否抛出了一个异常,并不想去处理它,那么一个简单的raise语句就可以再次把它抛出。67try:raiseNameError(HiThere)exceptNameError:print(Anexceptionflewby!)raiseAnexceptionflewby!-NameErrorTraceback(mostrecentcalllast)in()1try:-2raiseNameError(HiThere).NameError:HiThere异常处理o可见,异常是另一种函数返回方式,C语言或者其他没有异常机制的语言,函数只有通过返回值指明函数出错,所以每一级函数都要检查函数的返回值。o异常机制就是提供除了返回值之外的另一种出错处理方法。这种方法支持错误的向上冒泡,如果某一级函数不知道该怎么处理错误,那么就不处理,留给更上一级函数处理。大部分库中的模块的出错处理大多数都是抛出异常。68异常处理o在抛出异常时,可以是任何对象,用于详细描述错误类型;但一般要求是Exception类的子类69class ShortInputException:A user-defined exception class.def _init_(self,length,atleast):self.length=length self.atleast=atleasttry:s=raw_input(Enter something-)if len(s)3:raise ShortInputException(len(s),3)except ShortInputException,x:print ShortInputException:The input was of length%d,was expecting at least%d%(x.length,x.atleast)else:print No exception was raised.异常处理o与与Python异常相关的关键字:异常相关的关键字:n关键字关键字 关键字说明关键字说明nraise抛出/引发异常ntry/except捕获异常并处理npass忽略异常nas定义异常实例(exceptIOErrorase)nfinally无论是否出现异常,都执行的代码nelse如果try中的语句没有引发异常,则执行else中的语句7071
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!