异常处理
捕获异常
#将可能出错的部分用try运行
#当执行出错,后面代码不会继续执行,转到错误处理代码即except,执行相应错误处理
#如果没有错误则会执行else,最后不论什么情况finally一定执行
try:
print('try...')
r=10/int('a')
print('result',r)
#错误处理也是class,当执行父类的时候也会包含它的子类
#即xecept A在except B之前,A为B的父类。当出现错误B时只会执行靠前的A。
#一般都会使用“as e”代替当前错误
except ValueError as e:
print('ValueError:',e)
except ZeroDivisionError as e:
print('ZeroDivisionError:',e)
else:
print('No error!')
finally:
print('finally...')
print('END')
使用try…except…可以跨越多层调用,即当函数main()调用foo(),foo()调用bar()
当bar()出错时只要main()捕获到即可处理:
def foo(s):
return 10/int(s)
def bar(s):
return foo(s)*2
def main():
try:
bar('0')
except Exception as e:
print('Error:',e)
finally:
print('finally...')
只需要在合适的层次捕获错误即可。
python标准异常类点此查看
2.模块
模块通俗来说就是一个.py文件,模块是管理功能的代码。
python有自定义模块,如time,random等
自定义模块(同目录下的.py文件)
1.不要与系统模块重名
2.导入的功能代码不要与当前模块重名
#同目录下写一个.py文件,名字为first_module
num=10
print(num)
if __name__='__main__':
print(num+10)
#在另一个文件导入first_module,可以通过as改名
import first_module as fm
#只导入一部分函数可用from module import 函数名,*可代表所有函数。
#from first_module import 函数名
#当import的时候会将导入的代码全部执行一遍
**#在执行哪个文件时,__name__输出为__main__,当import其他模块时__name__为模块名**
**#即可以使用if __name__='__main__':来使该模块被调用时哪些不执行。**
#执行结果为10。前一个为import时执行的,if __name__='__main__'后面的print未执行。
3.文件基础操作
读文件
#filepath为文件路径,method为读取方式有[r,rb,r+,rb+,w,wb,w+,wb+,a,ab,a+,ab+]
#r代表read,为默认值。w为write,b以二进制形式,+代表读写,a。具体描述可度娘。
>>>filepath=‘D:\360Downloads’
>>>method='r'
**#使用windows默认编码是gpk所以要将encoding改为utf-8,linux与mac默认为utf-8不用修改。**
>>>f=open(filepath,method,encoding=utf-8)
#当文件不存在会报错,若成功打开可以通过read()读取。
#f.read()括号内为空读取全部,为数字则读取指定字节。
>>>f.read()
#打开后最后一步需要关闭
>>>f.close()
为了简化open和close可以用with语句,则不用调用close()
with open(filepath,method,encoding=utf-8) as f:
print(f.read())
如果文件很大可以使用read(size)或readlines()。readlines将所有内容按行返回成list
for line in f.readlines():
print(line.strip) #strip把末尾的'\n'删掉
写文件
#使用此方是将内容写入内存,并在空闲时写入,只有调用close()才能保证全部写入。
f=open(filepath,method,encoding=utf-8)
f.write('Hello world!')
f.close()
#用with方法可以保证全部写入。
with open(filepath,method,encoding=utf-8) as f:
f.write('Hello world!')