《python手记_电脑基础知识_IT计算机_专业资料.pdf》由会员分享,可在线阅读,更多相关《python手记_电脑基础知识_IT计算机_专业资料.pdf(78页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、python中 的import语句是用来导入模块的,在python模块库中有着大量的模块可供使用,要想使用这些文件需要用import语句把指定模块导入到当前程序中。import语句作用就是用来导入模块的,它可以出现在程序中的任何位置使 用import语句导入模块,import语句语法如下:import module关键字模块名使用方法例如:import math#入导 math 模块math.floor()#调 用math模块中的floor。函数如果要同时导入多个模块,只需要在模块名之前用逗号进行分隔:import modulel,module2,modules.在编写代码过程中,我们可能需要
2、多种多样的模块,需要注意的是最好把导入模块放在代码的开头。为什么要把import导入模块放在程序开头使用呢?解释器在执行语句时,遵循作用域原则。因为这和作用域有关系,如果在顶层导入模块,此时它的作用域是全局的;如果在函数内部导入了模块,那它的作用域只是局部的,不能被其它函数使用。如果其它函数也要用到这个模块,还需要再次导入比较麻烦。在 用import语句导入模块时最好按照这样的顺序:1、python标准库模块2、python第三方模块3、自定义模块from-import语句作用python from import语句也是导入模块的一种方法,更确切的说是导入指定的模块内的指定函数方法。from-
3、import语句语法from module import name关 键 字 模 块 名 关 键 字 方 法 名例如入导函数math模块中的floor函数方法:from math import floorpython from使用方法例如:from math import floor#导 入math模块中的floor函数方法floor()#调用floor。函数方法变量(variable)是学习python初始时,就会接触到的个新的知识点,也 是 个需要熟知的概念。python是一种动态类型语言,在赋值的执行中可以绑定不同类型的值,这个过程叫做变量赋值操作,赋值同时确定了变量类型。在玩蛇网pyt
4、hon学习过程中会用到许多数据,那为了方便操作,需要把这些数据分别用一个简单的名字代表,方便在接下来的程序中引用。变量就是代表某个数据(值)的名称。python变量赋值如何定义操作变量定义方法很简单:x=5这个操作过程就是赋值,意思把整型数字5 赋值给了变量x,用等号来连接变量名和值。之后就可以在表达式中使用这个新变量了。x*315注意:在赋值时,值是什么数据类型,就决定了这个变量的类型,变量名引用了数值的同时也引用了它的类型。变量命名规范1、变量名可以包括字母、数字、下划线,但是数字不能做为开头。例如:namel是合法变量名,而 1name就不可以。2、系统关键字不能做变量名使用3、除了下划
5、线之个,其它符号不能做为变量名使用4、Python的变量名是除分大小写的,例如:name和 Name就是两个变量名,而非相同变量哦。先 说1双引号与3个双引号的区别,双引号所表示的字符串通常要写成一行如:s l =h el l o,w o r l d”如果要写成多行,那么就要使用 (“连行符”)吧,如s 2 =h el l o,w o r l d”s 2与s l是一样的。如果你用3个双引号的话,就可以直接写了,如下:s 3 =h el l o,w o r l d,h a h a h a.,那么 s 3 实际上就是 h el l o,n w o r l d,n h a h a h a.,注 意“
6、n ,所以,如果你的字符串里 n很多,你又不想在字符串中用 n的话,那么就可以使用3个双引号。而且使用3个双引号还可以在字符串中增加注释,如下:s 3 =h e l l o,#h o h o,t h i s i s h e l l o,在3个双引号的字符串内可以有注释哦wo r l d,#h o h o,t h i s i s wo r l dh a h a h a.这就是3个双引号和1个双引号表示字符串的区别了,3个双引号与1个单引号的区别也是和这个一样的,实际上p y t h o n支持单引号是有原因的,下面我来比较1个单引号和1个双引号的区别。当我用单引号来表示一个字符串时,如果要表示L
7、 e t s go这个字符串,必须这样:s 4 =L e t s g o,注意没有,字符串中有一个,而字符串又是用来表示,所以这个时候就要使用转义符(,转义符应该知道吧),如果你的字符串中有一大堆的转义符,看起来肯定不舒服,p y t h o n也很好的解决了这个问题,如下:s 5 =L e t s g o”这时,我们看,p y t h o n知道你是用”来表示字符串,所以p y t h o n就把字符串中的那个单引号,当成普通的字符处理了,是不是很简单。对于双引号,也是一样的,下面举个例子s 6 =I r e a l y 1 i k e p y t h o n”!这就是单引号和双引号都可以表
8、示字符串的原因了。第一次自己写写,当是对学习过程的一个记录。加油!进入正题.()单引号在Py t h o n的I D L E中,直接输入:p r i n t C H e l l o W o r l d!)直接回车会看到如下图结果:print(*Hello World!*)Hello World!I(“)双引号同样的输入如下:p r i n t(,zH e l l o W o r l d!z/)结果:print(wHello World?)Hello World!I可以看出两个结果是一样,单引号和双引号这种情况是可以通用的;但是当两个混在一起用的时候很容易出错的,例如:p r i n t (Z,
9、I s a i d,D o n t d o i t )我们的本意是想打印出 这样的格式:I s a i d,“D o d t d o i t”但显示的结果是这样的一个提示:S y n t a x E r r o r:i n va l i d s y n t a x在这里我我们可以使用转义字符 来规避这样的错误p r i n t (Z,I s a i d,,D o n,t d o通过转义字符就可以得到我们预期的效果啦!print(I said,Don t doI said,HDon,t do it I()三引号三引号的主要作用是起到换行的作用,看下下面两行的代码代码一p r i n t (z,Y
10、 o u c a n n o t i m p r o ve y o u r p a s t,n b u t y o u c a n i m p r o ve y o u rf u t u r e.n On c e t i m e i s wa s t e d,l i f e i s wa s t e d./z);代码二p r i n t (“Y o u c a n n o t i m p r o ve y o u r p a s t,b u t y o u c a n i m p r o ve y o u r f u t u r e.On c e t i m e i s wa s t e d,
11、l i f e i s wa s t e d.)看下面的两个结果,可以清楚看到两个p r i n t的结果是一样,说明在输入结束三引号之前这些文本是不作处理,可以进行换行输入。*a f.a u*rrv ;m&:?txm “l i f t&vo?#4.*|tVem UUMl print(n w nYou cannot xiqprcve your past,but you can improve your future.Once time is wasted,life is wasted.H)You cannot improve your past,but you can improve your
12、 future.Once time is wasted,life is wasted.|字符串追加和拼接通过字符串的占位符来进行字符串的拼接#1元组拼接m =pythona str=i love%s,%m#前一个s是占位符,而后面的是字符替换的意思。print a str#2字符串的format方法m =pythona str=i love p yth o n.format(python=m)print a str#3字典格式化字符串m =pythona str=i love%(python)s%,python:mprint a str字符串复制通过变量来进行赋值fs tr =strcp ys
13、 s tr=fs trfs tr =strcpy2print s s tr字符串长度通过内置方法len()来计算字符串的长度,注意这个计算的是字符的长度。aa=afebbbb=,你,print len(aa)print len(bb)字符串大小写通过下面的upper(),lower()等方法来转换大小写S.upper()#S中的字母大写S.lower()#S中的字母小写S.capitalize()#首字母大写S.istitleQ#S是否是首字母大写的S.isupperO#S中的字母是否便是大写S.islowerO#S中的字母是否全是小写字符串去空格通过stripO,lstripO,rstrip
14、()方法去除字符串的空格,strip(rm)删掉字符串开头和结尾的r m,若括号内为空,表示删除字符串开头和结尾部分的空白符,包括n,r,f,S.strip()去掉字符串的左右空格S.lstrip()去掉字符串的左边空格S.rstripO去掉字符串的右边空格strip只是去除开头和结尾的字符,如果要去除中间的字符,用replacelname=stevenen2name.replace(e,)字符串其他方法字符串相关的其他方法:count。,join。方法等。S.center(width,fillchar)#中间对齐S.count(substr,start,end)#计算 substr 在 S
15、中出现的次数S.expandtabs(tabsize)#把 S 中的tab字符替换没空格,每个tab替换为tabsize个空格,默认是8 个S.isalnumO#是否全是字母和数字,并至少有一个字符S.isalphaQ#是否全是字母,并至少有一个字符S.isspace()#是否全是空白字符,并至少有一个字符S.join()#S中的jo in,把列表生成个字符串对象S.ljust(width,fillchar)#输出width个字符,S 左对齐,不足部分用fillchar填充,默认的为空格。S.ijust(width,fillchar)#右对齐S.splitlines(keepends)#把 S
16、 按照行分割符分为一个 list,keepends 是一个 bool值,如果为真每行后而会保留行分割符。S.swapcaseQ#大小写互换最近在做那个测试框架的时候发现P y th o n 的另一个获得系统执行命令的返回值和输出的类。最开始的时候用P y th o n 学会了 o s.s y ste m()这个方法是很多比如C,P e r l相似的。os.systemC cat/proc/cpuinfo)但是这样是无法获得到输出和返回值的,继 续 Google,之后学会了 os.popen()。o u t p u t =o s.p o p e n (c a t /p r o c/c p u i
17、 n f o)p r i n t o u t p u t,r e a d ()通 过os.popen()返 回 的 是file read的对象,对其进行读取read()的操作可以看到执行的输出。但是怎么读取程序执行的返回值呢,当然继续请教伟大的Googleo Google 给我指向了 commands Utilities for runningcommandSo这 样 通 过commands.getstatusoutput()一个方法就可以获得到返回值和输出,非常好用。(s t a t u s,o u t p u t)=c o m m a n d s.g e t s t a t u s o u
18、 t p u t (c a t/p r o c/c p u i n f o)p r i n t s t a t u s,o u t p u tPython Document中给的一个例子,很清楚的给出了各方法的返回。i m p o r t c o m m a n d s c o m m a n d s,g e t s t a t u s o u t p u t C Is /b i n/l s)(0,/b i n/l s)c o m m a n d s.g e t s t a t u s o u t p u t C c a t /b i n/j u n k)(2 5 6,c a l:/b i n
19、/j u n k:N o s u c h f i l e o r d i r e c t o r y*)c o m m a n d s,g e t s t a t u s o u t p u t C/b i n/j u n k)(2 5 6,s h:/b i n/j u n k:n o t f o u n d)c o m m a n d s.g e t o u t p u t C Is /b i n/l s*)/b i n/l s)c o m m a n d s,g e t s t a t u s C/b i n/l s)-r w x r-x r-x 1 r o o t 1 3 3 5 2 O
20、 c t 1 4 1 9 9 4 /b i n/l s 使用关键词def声明这是一个函数1def函数名(参数):2语句块参数可以没有,也可以有多个,用逗号隔开,第一行称为函数头,结尾一定要加冒号,代表开始进入函数体的执行。语句块也就是函数体,是关于这个函数要实现的功能的语句,语句要有返回值即return语句,如果没有return语句,就代表return none.准则学习了下G o o g l e的字符串连接准则,有如下三条:1 .简 单 字 符 串 连 接 时,直 接 使 用 例 如:f u l l _ n a m e =p r e f i x +n a m e2 .复杂的,尤其有格式化需求
21、时,使用”进行格式化连接,例如:r e s u l t=r e s u l t i s%s:%d/z%(n a m e,s c o r e)3.当有大量字符串拼接,尤其发生在循环体里时,使用str.join”进行连接,例如:r e s u l t =.j o i n(n a m e s _ t u p l e)o s模块一、o s模块概述Python o s模块包含普遍的操作系统功能。如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的。(一语中的)二、常用方法1、os.name输出字符串指示正在使用的平台。如果是w indow则用nt表示,对于Linux/Unix 用户,它是posix
22、。2、os.getcwd()函数得到当前工作目录,即当前Python脚本工作的目录路径。3、os.listdir()返回指定目录下的所有文件和目录名。os.listdir(os.getcwd()Django,DLLs,Doc,include,Lib,libs,LICENSE.txt,MySQL-python-wininst.log,NEWS.txt,PIL-wininst.log,python.exe,pythonw.exe,README.txtRemoveMySQL-python.exe,RemovePIL.exe,Removesetuptools.exe,Scripts,setuptool
23、s-wininst.log,tel,Tools,w9xpopen.exe 4、os.remove()删除一个文件。5、os.system()运行shell命令。os.system(dir)0 os.system(cmd)#启动 dos6、os.sep可以取代操作系统特定的路径分割符。7、os.linesep字符串给出当前平台使用的行终止符 os.lineseprn#Windows 使用rn,Linux 使用n而 Mac 使用r。os.sepW#Windows 8、os.path.split()函数返回一个路径的目录名和文件名 os.path.split(C:Python25abc.txt)(C
24、:Python25,abc.txt)9、os.path.isfile。和os.path.isdir()函数分别检验给出的路径是一个文件还是目录。os.path.isdir(os.getcwd()True os.path.isfile(a.txt)False10、os.path.exists。函数用来检验给出的路径是否真地存在 os.path.exists(C:Python25abc.txt,)False os.path.exists(,C:Python25,)True 11、os.path.abspath(name):获得绝对路径12、os.path.normpath(path):规范 pat
25、h 字符串形式13、os.path.getsize(name):获得文件大小,如果name是目录返回0L14、os.path.splitext。:分离文件名与扩展名 os.path.splitext(a.txt)(aJtxt)15、os.path.join(path,name)二连接目录与文件名或目录 os.path.joinCciWPythonVa.txt1)七:PythonWa.txt os.path.join(c:Python?f)iWPythonWfr 16、os.path.basename(path):返回文件名 os.path.basenameC.txf)a.txt,os.path
26、.basename(,c:Pythona.txt,)a.txt 17、os.path.dirname(path):返回文件路径 os.path.dimame(,c:Pythona.txt,),ciWPython,o s 和 o s.p a t h 模块o s.l i s t d i r (d i r n a m e):列出d i r n a m e 下的目录和文件o s.g e t c w d O :获得当前工作目录o s.c u r d i r:返回当前目录o s.c h d i r (d i r n a m e):改变工作目录到 d i r n a m eo s.p a t h,i s d
27、 i r(n a m e):判断n a m e 是不是一个目录,n a m e 不是目录就返回f a l s eo s.p a t h,i s f i l e (n a m e):判断n a m e 是不是一个文件,不存在n a m e 也返回f a l s eo s.p a t h,e x i s t s (n a m e):判断是否存在文件或目录n a m eo s.p a t h,g e t s i z e (n a m e):获得文件大小,如果n a m e 是目录返回0 Lo s.p a t h,a b s p a t h (n a m e):获得绝对路径o s.p a t h,n
28、o r m p a t h (p a t h):规范 p a t h 字符串形式o s.p a t h,s p l i t (n a m e):分割文件名与目录(事实上,如果你完全使用目录,它也会将最后个目录作为文件名而分离,同时它不会判断文件或目录是否存在)o s.p a t h,s p l i t e x t 0 :分离文件名与扩展名o s.p a t h,j o i n (p a t h,n a m e):连接目录与文件名或目录o s.p a t h.b a s e n a m e (p a t h):返回文件名o s.p a t h,d i r n a m e (p a t h):返回
29、文件路径o s.r e m o v e ()函数用来删除一个文件1 .重命名:o s.r e n a m e (o l d,n e w)2 .删除:o s.r e m o v e (f i l e)3 .列出目录下的文件:o s.l i s t d i r (p a t h)4 .获取当前工作目录:o s.g e t c w d O5 .改变工作目录:o s.c h d i r (n e w d i r)6.创建多级目录:o s.m a k e d i r s (r c:p y t h o n t e s t,/)7 .创建单个目录:o s.m k d i r (t e s t)8.删除多个目
30、录:o s.r e m o v e d i r s(rz,c:p y t h o n,z)#删除所给路径最后一个目录下所有空目录。9 .删除单个目录:o s.r m d i r (t e s t)1 0 .获取文件属性:o s.s t a t (f i l e)1 L 修改文件权限与时间戳:o s.c h m o d(f i l e)1 2 .执行操作系统命令:o s.s y s t e m(z zd i rz,)1 3 .启动新进程:o s.e x e c (),o s.e x e c v p O1 4 .在后台执行程序:o s s p a w n v O1 5,终止当前进程:o s.e x
31、 i t (),o s._ e x i t ()1 6.分离文件名:o s.p a t h,s p l i t (r,zc:p y t h o n h e l l o.p y )(c:p y t h o r T,“h e l l o.p y )1 7 .分离扩展名:o s.p a t h,s p l i t e x t (rz/c:p y t h o n h e l l o.p y )-(c:p y t ho n h e l l oz,,.p y )1 8.获取路径名:o s.p a t h,d i r n a m e (r c:p y t h o n h e l l o.p y )c:W p
32、 y t h o n1 9.获取文件名:o s.p a t h,b a s e n a m e(r/,r:p y t h o n h e l l o.p yz,)-“h e l l o.p y 2 0 .判断文件是否存在:o s.p a t h.e x i s t s (r/zc:p y t h o n h e l l o.p yz,)T r u e2 1.判断是否是绝对路径:o s.p a t h.i s a b s(r/,.p y t h o n,z)-F a l s e2 2.判断是否是目录:o s.p a t h,i s d i r(r,c:p y t h o n,/)T r u e2
33、 3.判断是否是文件:o s.p a t h.i s f i l e(r/zc:p y t h o n h e l l o.p yz,)-T r u e2 4.判断是否是链接文件:o s.p a t h.i s l i n k(rz,c:p y t h o n h e l l o.p y,z)F a i se2 5 .获取文件大小:o s.p a t h,g e t s i z e(f i l e n a m e)2 6.指定路径是否存在且为一个挂载点:o s.i s m o u n t Cc:z,)-T r u e27.搜索目录下的所有文件:o s.p a t h,w a l k ()结果:
34、?R o o t =D:T e s t d i r s =S u b T e s t 1 ,S u b T e s t 2 f i l e s =T ES TDO CU M EN T.d o c x ,T ES T.t x t R o o t =D:T e s t S u b T e s t l d i r s =T h i r d L a y e r f i l e s =T ES TDO CU M EN T!.d o c x ,T ES T l.t x t R o o t =D:T e s t S u b T e s t l T h i r d L a y e r d i r s =f i
35、 l e s =T ES T D O C U M E N TL 3.d o c x ,T ES T L 3.t x t R o o t =D:T e s t S u b T e s t 2 d i r s =f i l e s =T ES T DO CU M EN T 2.d o c x ,T ES T 2.t x t 结果分析1,先从根目录进行遍历,读取跟目录的文件夹和文件。2,以根目录第一个子目录为新的根目录,读取其文件夹和文件。3,再 以2中的第一个子文件夹为根目录,读取文件夹和文件。(这个应该是属于树结构里面的自上而下深度遍历算洲)4,读取1步骤里面其他子目录的文件夹和文件。s h u
36、 t i l模块对文件的操作:L 复制单个文件:s h u t i l.c o p y (o l d f i l e,n e w f l e)2,复制整个目录树:s h u t i l.c o p y t r e e (r .s e t u p ,r .b a c k u p )3.删除整个目录树:s h u t i l.r m t r e e(r .b a c k u p )os.mkdir(file)创建目录复制文件:shutil.copyfile(oldfile,newfile)o l d f i l e 和 n e w f i l e 都只能是文件shutil.copyColdfile
37、,newfile)oldfile 只能是文件夹,newfile 可以是文件,也可以是目标目录复制文件夹:shutil.copytree(olddir,newdir)olddir 和 newdir 都只能是目录,且newdir必须不存在重命名文件(目录)os.rename(oldname,newname)文件或目录都是使用这条命令移动文件(目录)shutil.move(oldpos,newpos)删除文件os.remove(file)删除目录os.rm dir(“dir”)只能删除空目录,如果目录不为空,应该先删空内容shutil.rmtree(dir)空目录、有内容的目录都可以删转换目录os.
38、chdir(path)换路径p rin t会自动在行末加上回车,如果不需回车,只需在print语句的结尾添加一个逗号”,“,就可以改变它的行为。for i in range(0,5):print i,或直接使用下面的函数进行输出:sys.stdout,write(输出的字串”)在需要在字符中使用特殊字符时,python用反斜杠()转义字符。如下表:原始字符串有时我们并不想让转义字符生效,我们只想显示字符串原来的意思,这就要用r和R来定义原始字符串。如:print rtr实际输出为看 看 Python基础编程中对格式化输出的总结:(1)./字符:标记转换说明符的开始(2).转换标志:-表示左对齐
39、;+表示在转换值之前要加上正负号;“字符)表示正数之前保留空格;0 表示转换值若位数不够则用0 填充(空白(3).最小字段宽度:转换后的字符串至少应该具有该值指定的宽度。如果是*,则宽度会从值元组中读出。(4).点(.)后跟精度值:如果转换的是实数,精度值就表示出现在小数点后的位数。如果转换的是字符串,那么该数字就表示最大字段宽度。如果是*,那么精度将从元组中读出(5).字符串格式化转换类型转换类型含义d,i带符号的十进制整数0不带符号的八进制u不带符号的十进制X不带符号的十六进制(小写)X不带符号的十六进制(大写)e科学计数法表示的浮点数(小写)E科学计数法表示的浮点数(大写)f,F十进制浮
40、点数g和 f 相同如果指数大于-4 或者小于精度值则和e 相同,其他情况GF 相同如果指数大于-4 或者小于精度值则和E 相同,其他情况和C单字符(接受整数或者单字符字符串)r字符串(使用re pr转换任意py t hon对象)s字符串(使用s t r转换任意py t hon对象)a b s (num b e r),返回数字的绝对值cmath.sqrt(number),返回平方根,也可以应用于负数float(object),把字符串和数字转换为浮点数h e lp(),提供交互式帮助input(prompt),获取用户输入in t(o b je c t),把字符串和数字转换为整数math,cei
41、l(number),返回数的上入整数,返回值的类型为浮点数math.floor(number),返回数的下舍整数,返回值的类型为浮点数math.sqrt(number),返回平方根不适用于负数pow(x,y.z),返回X的y 次 暴(有 z 则对z 取模)repr(object),返回值的字符串标示形式round(number.ndigits),根据给定的精度对数字进行四舍五入str(object),把值转换为字符串定义函数需要用到def语句,具体的定义函数语法格式如图所示:d e f函数名(参数):代码块 玩蛇网Python学习与分享平台玩蛇网python学习交流平台提醒大家,定义函数需要注
42、意的几个事项:1、def开头,代表定义函数2、def和函数名中间要敲一个空格3、之后是函数名,这个名字用户自己起的,方便自己使用就好4、函数名后跟圆括号(),代表定义的是函数,里边可加参数5、圆括号0 后一定要加冒号:这个很重要,不要忘记了6、代码块部分,是由语句组成,要有缩进7、函数要有返回值returnsys是 Python的一个 标准库,也就是官方出的 模块,是 FSystem 的简写,封装了一些系统的信息和接口python的程序有两种退出方式:os._exit(),sys.exit。本文介绍这两种方式的区别和选择。os._exit()会直接将python程序终止,之后的所有代码都不会继
43、续执行。sys.exit()会引发一个异常:SystemExit,如果这个异常没有被捕获,那么python解释器将会退出。如果有捕获此异常的代码,那么这些代码还是会执行。综上,sys.exit。的退出比较优雅,调用后会引发SystemExit异常,可以捕获此异常做清理工作。os._exit()直接将python解释器退出,余下的语句不会执行。般情况下使用sys.exit。即可,般在fo rk出来的子进程中使用os._exit()空函数如果想定义个什么事也不做的空函数,可以用pass语句:def nop():passpass语句什么都不做,那有什么用?实际上pass可以用来作为占位符,比如现在还
44、没想好怎么写函数的代码,就可以先放一个p a s s,让代码能运行起来。如果你想要为个定义在函数外的变量赋值,那么你就得告诉Python这个变量名不是局部的,而是 全局 的。我们使用global语句完成这一功能。没有global语句,是不可能为定义在函数外的变量赋值的。global语句被用来声明x是全局的因此,当我们在函数内把值赋给x的时候,这个变化也反映在我们在主块中使用x的值的时候。你可以使用同一个global语句指定多个全局变量。例如global x,y,z。与其他语言相同,在python中,try/except语句主要是用于处理程序正常执行过程中出现的一些异常情况,如语法错误(pyth
45、on作为脚本语言 没有编译的环节.,在执行过程中对语法进行检测,出错后发出异常消息)、数据除零错误、从未定义的变量上取值等;而try/finally语句则主要用于在无论是否发生异常情况,都需要执行一些清理工作的场合,如在通信过程中,无论通信是否发生错误,都需要在通信完成或者发生错误时关闭网络连接。尽管try/except和try/finally的作用不同,但是在编程实践中通常可以把它们组合在一起使用try/except/else/finally的形式来实现稳定性和灵活性更好的设计。默认情况下,在程序段的执行过程中,如果没有提供try/except的处理,脚本文件执行过程中所产生的异常消息会自动
46、发送给程序调用端,如python shell,而python shell对异常消息的默认处理则是终止程序的执行并打印具体的出错信息。这也是在python shell中执行程序错误后所出现的出错打印信息的由来。p y t h o n 中t r y/e x c e p t/e l s e/f i n a l l y 语句的完整格式如下所示:t r y:No r m a l e x e c u t i o n b l o c ke x c e p t A:E x c e p t i o n A h a n d l ee x c e p t B:E x c e p t i o n B h a n d
47、l ee x c e p t:O t h e r e x c e p t i o n h a n d l ee l s e:i f n o e x c e p t i o n,g e t h e r ef i n a l l y:p r i n t(f i n a l l y )说明:正常执行的程序在t r y 下面的N o r m a l e x e c u t i o n b l o c k 执行块中执行,在执行过程中如果发生了异常,则中断当前在N o r m a l e x e c u t i o n b l o c k 中的执行跳转到对应的异常处理块中开始执行;p y t h o n
48、从第一个e x c e p t X 处开始查找,如果找到了对应的e x c e p t i o n 类型则进入其提供的e x c e p t i o n h a n d l e 中进行处理,如果没有找到则直接进入e x c e p t块处进行处理。e x c e p t 块是可选项,如果没有提供,该 e x c e p t i o n 将会被提交给 p y t h o n 进行默认处理,处理方式则是终止应用程序并打印提示信息;如果在N o r m a l e x e c u t i o n b l o c k 执行块中执行过程中没有发生任何异常,则在执行完N o r m a l e x e c
49、 u t i o n b l o c k 后会进入e l s e 执行块中(如果存在的话)执行。无论是否发生了异常,只要提供了 f i n a l l y 语句,以上t r y/e x c e p t/e l s e/f i n a l l y代码块执行的最后一步总是执行f i n a l l y 所对应的代码块。需要注意的是:1 .在上面所示的完整语句中 y/e x c e p t/e l s e/f i n a l l y 所出现的顺序必须是t r y-e x c e p t X-e x c e p t-e l s e-f i n a l l y,即所有的 e x c e p t 必须在
50、e l s e和 f i n a l l y 之前,e l s e (如果 有的话)必须在f i n a l l y 之前,而 e x c e p t X必须在 e x c e p t 之前。否则会出现语法错误。2 .对于上面所展示的t r y/e x c e p t 完整格式而言,e l s e 和 f i n a l l y 都是可选的,而不是必须的,但是如果存在的话e l s e 必须在f i n a l l y 之前,f i n a l l y (如果存在的话)必须在整个语句的最后位置。3 .在上面的完整语句中,e l s e 语句的存在必须以e x c e p t X 或者e x c