Python科学计算与数据处理ppt课件.ppt

上传人:牧羊曲112 文档编号:1999390 上传时间:2022-12-30 格式:PPT 页数:73 大小:396.50KB
返回 下载 相关 举报
Python科学计算与数据处理ppt课件.ppt_第1页
第1页 / 共73页
Python科学计算与数据处理ppt课件.ppt_第2页
第2页 / 共73页
Python科学计算与数据处理ppt课件.ppt_第3页
第3页 / 共73页
Python科学计算与数据处理ppt课件.ppt_第4页
第4页 / 共73页
Python科学计算与数据处理ppt课件.ppt_第5页
第5页 / 共73页
点击查看更多>>
资源描述

《Python科学计算与数据处理ppt课件.ppt》由会员分享,可在线阅读,更多相关《Python科学计算与数据处理ppt课件.ppt(73页珍藏版)》请在三一办公上搜索。

1、Python基础,Python函数,1,目录,函数的定义与调用调用函数的形式函数的参数局部变量和全局变量函数的注释说明常用函数,2,函数的定义与调用,函数是一个能完成特定功能的代码块,可在程序中重复使用,减少程序的代码量和提高程序的执行效率。在python中函数定义语法如下:def function_name(arg1,arg2,.):statement return value 返回值不是必须的,如果没有return语句,则Python默认返回值None,3,函数的定义与调用,定义函数,通常使用def语句。函数名可以是任何有效的Python标识符。参数列表可以由多个、一个或零个参数组成。圆括

2、号是必不可少的,即使没有参数也不能没有它;不要忘记圆括号后面的冒号。函数体一定要注意缩进。“形参”和“实参”。return语句的作用是结束函数调用,可以出现在函数体的任意位置。,4,def 函数名(参数列表): 函数体,def add1(x): x = x + 1 return x,def add1(x): x = x + 1 return xadd1(1)2,调用函数的形式,调用函数的一般形式是:上例:对于没有使用return语句的函数,它实际上也向调用者返回一个值,那就是None。标准调用方式,传递的值按照形参定义的顺序相应地赋给它们。,5,函数名(参数表),add1(1),def mya

3、dd(): sum=1+1 a=myadd()aprint aNone,调用函数的形式,“关键字调用”方式,即在调用函数时同时给出形式参数和实际参数。 “关键字调用”方式在函数具有多个参数是非常有用,因为解释器能通过给出的关键字来匹配参数的值,所以这样就允许参数缺失或者不按定义函数时的形式参数的顺序提供实际参数。,6,def select(x, y): 让x年级y班的学生打扫卫生,select(3, 6),select(6, 3),select(x=3, y=6),select(y=6,x=3 ),函数的参数,在定义函数时,我们可以用赋值符号给某些形参指定默认值,这样当调用该函数的时候,如果调

4、用方没有为该参数提供值的话,则使用默认值。如果调用该函数的时候为该参数提供了值的话,则使用调用方提供的值像这样的参数我们称之为缺省参数。默认参数必须在所有标准参数之后定义。,7,def f(arg1,arg2=2,arg3=3): print arg1 = , arg1 print arg2 = , arg2 print arg3 = , arg3,函数的参数,带有缺省参数的函数:,用“关键字调用”方式调用带有缺省参数的函数:,8,f(10,arg3=10)arg1 = 10arg2 = 2arg3 = 10f(arg3=10,arg1=10)arg1 = 10arg2 = 2arg3 = 1

5、0f(10,arg2=10)arg1 = 10arg2 = 10arg3 = 3f(arg2=10,arg1=10)arg1 = 10arg2 = 10arg3 = 3,def f(arg1,arg2=2,arg3=3): print arg1 = , arg1 print arg2 = , arg2 print arg3 = , arg3 f(10)arg1 = 10arg2 = 2arg3 = 3f(10,10)arg1 = 10arg2 = 10arg3 = 3f(10,10,10)arg1 = 10arg2 = 10arg3 = 10,函数的参数,需要一个函数能处理比当初声明时更多的参

6、数。这些参数叫做不定长参数.加了星号(*)的变量名会存放所有未命名的变量参数。选择不多传参数也可。,9,def functionname(formal_args, *var_args_tuple ): 函数_文档字符串 function_suite return expression,函数的参数,10,# 可写函数说明def printinfo( arg1, *vartuple ): 打印任何传入的参数 print 输出: print arg1 for var in vartuple: print var return; printinfo( 10 ) # 调用printinfo 函数输出:

7、10printinfo( 70, 60, 50 ) #以上实例输出结果:输出: 706050,函数的参数,在一个函数中对参数名赋值不影响调用者。 在一个函数中改变一个可变的对象参数会影响调用者,如列表,字典,数组等。参数是对象指针,无需定义传递的对象类型。,def test(a,b):return (a+b)print test(1,2)print test(1,2)print test(1,2),11,匿名函数,用lambda关键词能创建小型匿名函数。Lambda函数能接收任何数量的参数但只能返回一个表达式的值。匿名函数不能直接调用print,因为lambda需要一个表达式。lambda函数

8、拥有自己的名字空间,且不能访问自有参数列表之外或全局名字空间里的参数。,12,lambda arg1 ,arg2,.argn:expression,匿名函数,13,#可写函数说明 sum = lambda arg1, arg2: arg1 + arg2;#调用sum函数print Value of total : , sum( 10, 20 )Value of total : 30print Value of total : , sum( 20, 20 )Value of total : 40,局部变量和全局变量,在一个函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用的变

9、量我们称之为局部变量;在一个文件顶部定义的变量可以供该文件中的任何函数调用,这些可以为整个程序所使用的变量称为全局变量。 如想在局部作用域中改变全局作用域的对象,必须使用global关键字。,# coding=utf-8globalInt = 9 #定义一个函数 def myAdd(): localInt = 3 global gigi =7#在函数中定义一个局部变量 return globalInt + localInt #测试变量的局部性和全局性 print myAdd() print globalIntprint gi print localInt,14,局部变量和全局变量,15,glo

10、balInt = 9def myAdd(): localInt = 3 global gigi =7return globalInt + localIntprint myAdd()12print globalInt9print gi7print localIntNameErrorNameError: name localInt is not defined,函数的注释说明文档字符串,在函数定义后紧跟的字符串会被认为是函数的说明,使用help(函数名)可显示出来。import testhelp(add2)显示_doc_属性,16,常用函数 1/3,abs(x):abs()返回一个数字的绝对值。如

11、果给出复数,返回值就是该复数的模。callable(object):callable()函数用于测试对象是否可调用,如果可以则返回1(真);否则返回0(假)。可调用对象包括函数、方法、代码对象、类和已经定义了“调用”方法的类实例。 cmp(x,y) :cmp()函数比较x和y两个对象,并根据比较结果返回一个整数,如果xy,则返回1,如果x=y则返回0。isinstance(object,class-or-type-or-tuple) - bool测试对象类型 isinstance(a,str),help()help_builtin_,17,常用函数 2/3,divmod(x,y): divmo

12、d(x,y)函数完成除法运算,返回商和余数。 pow(x,y,z) :pow()函数返回以x为底,y为指数的幂。如果给出z值,该函数就计算x的y次幂值被z取模的值。 len(object) - integer :len()函数返回字符串和序列的长度。min(x,y,z.) :返回序列或参数的最小值max(x,y,z.) :返回序列或参数的最大值,18,常用函数 3/3,range(lower,stop,step) :range()函数可按参数生成连续的有序整数列表。 round(x,n) :round()函数返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数。 type(obj)

13、:type()函数可返回对象的数据类型。 xrange(lower,stop,step):xrange()函数与range()类似,但xrnage()并不创建列表,而是返回一个xrange对象,它的行为与列表相似,但是只在需要时才计算列表值,当列表很大时,这个特性能节省内存。,19,类型转换函数数值型,float(x) :把一个数字或字符串转换成浮点数。 hex(x) :把整数转换成十六进制数。 oct(x) :把整数转换成八进制数。 int(x,base) :把数字和字符串转换成一个整数,base为可选的基数。complex(real,imaginary) :complex()函数可把字符串

14、或数字转换为复数。 complex(“2+1j”) 、 complex(2,1) long(x,base) long()函数把数字和字符串转换成长整数,base为可选的基数。,20,类型转换函数字符串,chr(i):chr()函数返回ASCII码对应的字符串ord(x):ord()函数返回一个字符串参数的ASCII码或Unicode值 。str(obj):str()函数把对象转换成可打印字符串。,21,类型转换函数序列对象,list(x) :list()函数可将序列对象转换成列表 tuple(x): tuple()函数把序列对象转换成tuple,22,序列操作函数,常用函数中的len()、ma

15、x()和min()同样可用于序列. filter(function,list):调用filter()时,它会把一个函数应用于序列中的每个项,并返回该函数返回真值时的所有项,从而过滤掉返回假值的所有项。 map(function,list,list):map()函数把一个函数应用于序列中所有项,并返回一个列表。reduce(function,seq,init) reduce()函数获得序列中前两个项,并把它传递给提供的函数,获得结果后再取序列中的下一项,连同结果再传递给函数,以此类推,直到处理完所有项为止。 zip(seq,seq,.) zip()函数可把两个或多个序列中的相应项合并在一起,并以

16、元组的格式返回它们,在处理完最短序列中的所有项后就停止。,23,24,Python基础,Python模块,目录,模块简介模块的_name_创建模块dir() 函数包(package),25,模块简介,模块是最高级别的程序组织单元,它将程序代码和数据封装起来以便重用。模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用python标准库的方法。,26,模块简介,import sys引入python标准库中的sys.py模块;这是引入某一模块的方法。2、sys.argv是一个包含命令行参数的列表。3、sys.path包含了一个

17、Python解释器自动查找所需模块的路径的列表。,27,#!/usr/bin/python# Filename: using_sys.pyimport sysprint The command line arguments are:for i in sys.argv: print iprint nnThe PYTHONPATH is,sys.path,n,python using_sys.py we are argumentsThe command line arguments are:using_sys.pyweareargumentsThe PYTHONPATH is /home/swar

18、oop/byte/code, ,模块简介,搜索路径被存储在sys模块中的path变量,做一个简单的实验,在交互式解释器中作为环境变量,PYTHONPATH由装在一个列表里的许多目录组成。PYTHONPATH的语法和shell变量PATH的一样。在Windows,典型的PYTHONPATH如下:,28,import sys sys.path,sys.path.append(E:pythontry),模块简介,from.import语句如果你想要直接输入argv变量到你的程序中(避免在每次使用它时打sys.),那么你可以使用from sys import argv语句。如果你想要输入所有sys模块

19、使用的名字,那么你可以使用from sys import *语句。这对于所有模块都适用。一般说来,应该避免使用from.import而使用import语句,因为这样可以使你的程序更加易读,也可以避免名称的冲突。,29,模块的_name_,当一个模块被第一次输入的时候,这个模块的主块将被运行。假如只想在程序本身被使用的时候运行主块,而在它被别的模块输入的时候不运行主块,我们该怎么做呢?这可以通过模块的_name_属性完成。,30,#!/usr/bin/python# Filename: using_name.pyif _name_ = _main_:print This program is b

20、eing run by itselfelse:print I am being imported from another module,模块的_name_,每个Python模块都有它的_name_,如果它是_main_,这说明这个模块被用户单独运行,我们可以进行相应的恰当操作。,31,$ python(run) using_name.pyThis program is being run by itself$ python import using_nameI am being imported from another module,创建模块,每个Python程序也是一个模块。你已经确保它

21、具有.py扩展名了。,32,#!/usr/bin/python# -*- coding: utf-8 -*-# Filename: mymodule.pydef sayhi():printHi, this is mymodule speaking.version = 0.1# End of mymodule.py,创建模块,33,注意使用了相同的点号来使用模块的成员。,#!/usr/bin/python# Filename: mymodule_demo.pyimport mymodulemymodule.sayhi()print Version, mymodule.version,$ pyth

22、on mymodule_demo.pyHi, this is mymodule speaking.Version 0.1,创建模块,下面是一个使用from.import语法的版本。输出与mymodule_demo.py完全相同。,34,#!/usr/bin/python# Filename: mymodule_demo2.pyfrom mymodule import sayhi, version# Alternative:# from mymodule import *sayhi()print Version, version,$ python mymodule_demo2.pyHi, thi

23、s is mymodule speaking.Version 0.1,dir() 函数,内置的函数 dir() 可以找到模块内定义的所有名称。以一个字符串列表的形式返回:如果没有给定参数,那么 dir() 函数会罗列出当前定义的所有名称。,35,import mymoduledir(mymodule)_builtins_, _doc_, _file_, _name_, _package_, sayhi, version,包(package),ackage包是一组module的集合,一个文件夹下面只要有个_init_.py 文件,这个文件夹就可以看作是一个包,用以下方法创建一个包先在当前目录创建

24、一个目录testpackage在testpackage下创建一个空文件_init_.py在testpackage中创建一个testmodule.py,里面编写任意代码。启动Python,运行:,36, import testpackage.testmodule testpackage.testmodule.sayhi()Hi, this is mymodule speaking.,包(package),包是一种组织模块的方法,提供了一个命名空间,防止发生名字冲突。包中还可以有包,所以这种方式可以很好的组织一个树状结构,用来管理多个模块。,37,38,Python基础,输入输出,目录,input

25、和print输出格式美化读和写文件,39,input和print,在很多时候,程序会需要与用户交互。程序会从用户那里得到输入,然后打印一些结果。我们可以分别使用input 、raw_input和print语句来完成这些功能。,40, name =raw_input(Please input your name:n) print(Hello, name) name =input(Please input your name:n) print(Hello, name), raw_input_B = raw_input(raw_input: ) raw_input: 123 type(raw_inp

26、ut_B) input_B = input(input: ) input: 123 type(input_B) ,输出格式美化,Python两种输出值的方式: 表达式语句和 print() 函数。(第三种方式是使用文件对象的 write() 方法)如果你希望输出的形式更加多样,可以使用 str.format() 函数来格式化输出值。如果你希望将输出的值转成字符串,可以使用 repr() 或 str() 函数来实现。str() 函数返回一个用户易读的表达形式。repr() 产生一个解释器易读的表达形式。,41,输出格式美化,42, s = Hello, world. str(s) repr(s)

27、 str(1/7) str(1.0/7) x = 10 * 3.25 y = 200 * 200 s = The value of x is + repr(x) + , and y is + repr(y) + . print(s) # repr() 函数可以转义字符串中的特殊字符 . hello = hello, worldn hellos = repr(hello) print(hellos) # repr() 的参数可以是 Python 的任何对象 . repr(x, y, (spam, eggs),输出格式美化,str.format() 的基本使用如下:括号及其里面的字符 (称作格式化

28、字段) 将会被 format() 中的参数替换。在括号中的数字用于指向传入对象在 format() 中的位置,如下所示:,43, print(We are the who say !.format(knights, Ni) We are the knights who say Ni!, print(0 and 1.format(spam, eggs) spam and eggs print(1 and 0.format(spam, eggs) eggs and spam,输出格式美化,如果在 format() 中使用了关键字参数, 那么它们的值会指向使用该名字的参数。位置及关键字参数可以任意的

29、结合:,44, print(This food is adjective.format(food=spam, adjective=absolutely horrible) This spam is absolutely horrible., print(The story of 0, 1, and other.format(Bill, Manfred, other=Georg) The story of Bill, Manfred, and Georg.,输出格式美化,!a (使用 ascii(), !s (使用 str() 和 !r (使用 repr() 可以用于在格式化某个值之前对其进行转

30、化:可选项 : 和格式标识符可以跟着字段名。 这就允许对值进行更好的格式化。 下面的例子将 Pi 保留到小数点后三位:,45, import math print(The value of PI is approximately .format(math.pi) The value of PI is approximately 3.14159265359. print(The value of PI is approximately !r.format(math.pi) The value of PI is approximately 3.141592653589793., import ma

31、th print(The value of PI is approximately 0:.3f.format(math.pi) The value of PI is approximately 3.142.,输出格式美化,在 : 后传入一个整数, 可以保证该域至少有这么多的宽度。 用于美化表格时很有用。,46, table = Sjoerd: 4127, Jack: 4098, Dcab: 7678 for name, phone in table.items(): . print(0:10 = 1:10d.format(name, phone) . Jack = 4098 Dcab = 76

32、78 Sjoerd = 4127,输出格式美化,如果你有一个很长的格式化字符串, 而你不想将它们分开, 那么在格式化时通过变量名而非位置会是很好的事情。最简单的就是传入一个字典, 然后使用方括号 来访问键值 :,47, table = Sjoerd: 4127, Jack: 4098, Dcab: 8637678 print(Jack: Jack:d; Sjoerd: Sjoerd:d; Dcab: Dcab:d.format(*table) Jack: 4098; Sjoerd: 4127; Dcab: 8637678,输出格式美化,旧式字符串格式化 % 操作符也可以实现字符串格式化。 它将

33、左边的参数作为类似 sprintf() 式的格式化字符串, 而将右边的代入, 然后返回格式化后的字符串.,48, import math print(The value of PI is approximately %5.3f. % math.pi) The value of PI is approximately 3.142.,读和写文件,open() 将会返回一个 file 对象,基本语法格式如下:第一个参数为要打开的文件名。第二个参数描述文件如何使用的字符。 mode 可以是 r 如果文件只读, w 只用于写 (如果存在同名文件则将被删除), 和 a 用于追加文件内容; 所写的任何数据都

34、会被自动增加到末尾. r+ 同时用于读写。 mode 参数是可选的; r 将是默认值。,49,open(filename, mode),读和写文件,f.write(string) 将 string 写入到文件中,50,# 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(),读和写文件,f.read(size), 读取数据, 然后作为字符串或字节对象返回。size

35、是一个可选的数字类型的参数。 当 size 被忽略了或者为负, 那么该文件的所有内容都将被读取并且返回。f.readline() 会从文件中读取单独的一行。换行符为 n。f.readline() 如果返回一个空字符串, 说明已经已经读取到最后一行。,51,f = open(foo.txt, r)str = f.readline()print(str)f.close(),读和写文件,f.tell() 返回文件对象当前所处的位置, 它是从文件开头开始算起的字节数。f.seek() 如果要改变文件当前的位置, 可以使用f.seek(offset, from_what) 函数。from_what 的值

36、, 如果是 0 表示开头, 如果是 1 表示当前位置, 2 表示文件的结尾,例如: seek(x,0) : 从起始位置即文件首行首字符开始移动 x 个字符 seek(x,1) : 表示从当前位置往后移动x个字符 seek(-x,2):表示从文件的结尾往前移动x个字符 from_what 值为默认为0,即文件开头。,52,读和写文件,ickle 模块 python的pickle模块实现了基本的数据序列和反序列化。 通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储。通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。 有了 pickl

37、e 这个对象, 就能对 file 以读取的形式打开:,53,pickle.dump(obj, file, ,protocol),x = pickle.load(file),读和写文件,使用pickle模块将数据对象保存到文件,54,import pickledata1 = a: 1, 2.0, 3, 4+6j, b: (string, uUnicode string), c: Noneselfref_list = 1, 2, 3selfref_list.append(selfref_list)output = open(data.pkl, wb)pickle.dump(data1, outpu

38、t) # Pickle dictionary using protocol 0.pickle.dump(selfref_list, output, -1) # Pickle the list using the highest protocol available.output.close(),读和写文件,使用pickle模块从文件中重构python对象,55,import pprint, picklepkl_file = open(data.pkl, rb)data1 = pickle.load(pkl_file)pprint.pprint(data1)a: 1, 2.0, 3, (4+6j

39、), b: (string, uUnicode string), c: Nonedata2 = pickle.load(pkl_file)pprint.pprint(data2)1, 2, 3, pkl_file.close(),56,Python基础,异常处理,目录,Python 错误和异常异常处理异常使用,57,Python 错误和异常,Python有两种错误很容易辨认:语法错误和异常。语法错误 Python 的语法错误或者称之为解析错。 这个例子中,函数 print() 被检查到有错误,是它前面缺少了一个冒号(:)。语法分析器指出了出错的一行,并且在最先找到的错误的位置标记了一个小小的箭

40、头。,58,while True print(Hello world) File , line 1 while True print(Hello world) SyntaxError: invalid syntax,Python 错误和异常,异常 即便Python程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。 大多数的异常都不会被程序处理,都以错误信息的形式展现在这里:,59,10 * (1/0)-ZeroDivisionError Traceback (most recent call last) in ()- 1 10 * (1/0)ZeroDivis

41、ionError: integer division or modulo by zero,Python 错误和异常,异常以不同的类型出现,这些类型都作为信息的一部分打印出来。错误信息的前面部分显示了异常发生的上下文,并以调用栈的形式显示具体信息。,60,4 + spam*3-NameError Traceback (most recent call last) in ()- 1 4 + spam*3NameError: name spam is not defined 2 + 2-TypeError Traceback (most recent call last) in ()- 1 2 +

42、2TypeError: cannot concatenate str and int objects,异常处理,Python的异常处理能力是很强大的,可向用户准确反馈出错信息。方式一:try语句:1、使用try和except语句来捕获异常,61,try: blockexcept exception,data: blocktry: blockexcept exception,data.: blockelse: block,异常处理,该种异常处理语法的规则是: 执行try下的语句,如果引发异常,则执行过程会跳到第一个except语句。 如果第一个except中定义的异常与引发的异常匹配,则执行该e

43、xcept中的语句。 如果引发的异常不匹配第一个except,则会搜索第二个except,允许编写的except数量没有限制。 如果所有的except都不匹配,则异常会传递到下一个调用本代码的最高层try代码中。如果没有发生异常,则执行else块代码。,62,异常处理,捕获到的IOError错误的详细原因会被放置在对象e中,然后运行该异常的except代码块。 使用except子句需要注意的事情,就是多个except子句截获异常时,如果各个异常类之间具有继承关系,则子类应该写在前面,否则父类将会直接截获子类异常。放在后面的子类异常也就不会执行到了。,63,try: f = open ( fil

44、e.txt, r ) except IOError, e: print e,异常处理,2、使用try跟finally: 该语句的执行规则是: 执行try下的代码。如果发生异常,在该异常传递到下一级try时,执行finally中的代码。如果没有发生异常,则执行finally中的代码。 第二种try语法在无论有没有发生异常都要执行代码的情况下是很有用的。例如在python中打开一个文件进行读写操作,在操作过程中不管是否出现异常,最终都是要把该文件关闭的。 这两种形式相互冲突,使用了一种就不允许使用另一种,而功能又各异。,64,try: blockfinally: block,try语句分句形式,6

45、5,异常处理,异常处理,方式二:抛出异常 Python 使用 raise 语句抛出一个指定的异常。 raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。,66, raise NameError(HiThere)-NameError Traceback (most recent call last) in ()- 1 raise NameError(HiThere)NameError: HiThere,异常处理,如果你只想知道这是否抛出了一个异常,并不想去处理它,那么一个简单的 raise 语句就可以再次把它抛出。,67,t

46、ry: raise NameError(HiThere) except NameError: print(An exception flew by!) raiseAn exception flew by!-NameError Traceback (most recent call last) in () 1 try:- 2 raise NameError(HiThere) .NameError: HiThere,异常处理,可见,异常是另一种函数返回方式,C语言或者其他没有异常机制的语言,函数只有通过返回值指明函数出错,所以每一级函数都要检查函数的返回值。异常机制就是提供除了返回值之外的另一种出

47、错处理方法。这种方法支持错误的向上冒泡,如果某一级函数不知道该怎么处理错误,那么就不处理,留给更上一级函数处理。大部分库中的模块的出错处理大多数都是抛出异常。,68,异常处理,在抛出异常时,可以是任何对象,用于详细描述错误类型;但一般要求是Exception类的子类,69,class ShortInputException: A user-defined exception class. def _init_(self, length, atleast): self.length = length self.atleast = atleasttry: s = raw_input(Enter s

48、omething - ) 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.,异常处理,在except中,只要ExceptionType和抛出的对象类型一致,就可以捕获这个异常。类型一致指:对象是此类型的一个实

49、例,如果一个对象所属的类继承了其他的类,那么这个对象就可以是多类型的实体,这些类型包括对象所属的类的父类,父类的父类.等,70,异常使用,抛出和捕获异常提供了一种方便的出错处理机制。函数不用再通过特殊返回值来通知上一级函数(函数的调用者)发生了错误,而是通过raise异常的方式。除了处理实际的错误条件之外,对于异常还有许多其它的用处。在标准 Python 库中一个普通的用法就是试着导入一个模块,然后检查是否它能使用。导入一个并不存在的模块将引发一个 ImportError 异常。你可以使用这种方法来定义多级别的功能依靠在运行时哪个模块是有效的,或支持多种平台 (即平台特定代码被分离到不同的模块中)。,71,异常使用,也能通过创建一个从内置的 Exception 类继承的类定义你自己的异常,然后使用 raise 命令引发你的异常。这种方法可以加快开发速度,开发初期,可以不用处理任何错误,只按照正常结果进行编码,等原型开发完成后再加入异常处理的代码。,72,73,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号