前言
本节知识要点:捕获异常、模块、包、文件的读写等。
一、异常捕获
高级语言通常都有内置一套try……except……finally……的错误处理机制。
try:
print("try……")
r=10/0
print("result:",r)
except ZeroDivisionError as e:
print("except:",e)
finally:
print("finally……")
print("END")
输出:
try……
except: division by zero
finally……
END
当认为某些代码可能会出错的时候,可以使用try来执行这串代码,如果执行出错,则后续代码不会继续执行,而是直接跳转到错误处理代码,即except语句,后面如果是有finally语句,则执行finally语句块,这样,程序就执行完毕了。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
如果把上面的语句修改一下
try:
print("try……")
r=10/5
print("result:",r)
except ZeroDivisionError as e:
print("except:",e)
finally:
print("finally……")
print("END")
输出:
try……
result: 2.0
finally……
END
把值修改了一下,成功执行了result语句。
当然,错误也有很多种类,如果发生不同类型的错误,应该有不同的except语句处理块,所以也可以有多个except来捕获不同类型的错误:
#多种类型错误捕获
try:
print("try……")
r=10/int("2")
print("result")
except ValueError as e:
print("ValueError:",e)
except ZeroDivisionError as e:
print("ZeroDivisionError:",e)
else:
print("no error!")
finally:
print("finally……")
print("END")
输出:
try……
result
no error!
finally……
END
Python的错误其实也是class,所有的错误类型都继承自BaseException,所以在使用except时需要注意的时,它不但捕获该类型的错误,而且还把其子类一网打尽。
例如:
#错误类
try:
r=10/int("a")
except ValueError as e:
print("ValueError")
except UnicodeError as e:
print("UnicodeError")
#永远都无法捕捉UnicodeError错误,因为UnicodeError是ValueError的子类,如果有,也被ValueError捕获了。
输出:
ValueError
同时也说明了不需要在每个可能出错的地方去捕获错误,只要在合适的层次去捕获错误就好啦,这样可以大大减少写try……except……finally……语句。
Python所有的标准异常类:
https://docs.python.org/3/library/exceptions.html#exception-hierarchy
2.模块
模块可以理解为一个.py文件就是一个模块,模块是管理功能代码的。
Python内置的模块就是自己内部自带的,不需要我们去下载的模块,比如time,random。
自定义模块:自定义模块和变量名的定义很类似,都是由字母、数字、下划线来组成的,但是不能以数字开头,否则无法导入该模块。
模块导入的注意点:
1、导入的模块名不要和系统的模块名重名;
2、导入的功能代码不要在当前模块定义,否则使用不了导入模块的功能代码。
有待补充:
3.文件的基本操作
文件简介:文件包括二进制文件和文本文件(声音、图像视频),从存储方式来看,二者都是二进制形式。;读写操作来看二进制读写是将内存里面的数据直接读写入文本中,而文本文件是将数据先转换成字符串,再写入到文本中。
读文件:
#读文件
f=open("/Users/mike/test.txt","r")
----------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
<ipython-input-17-72050b7f3473> in <module>
----> 1 f=open("/Users/mike/test.txt","r")
FileNotFoundError: [Errno 2] No such file or directory: '/Users/mike/test.txt'
如果文件打开成功,接下来,调用read方法可以一次性读入文件的全部内容,Python把内容读入到内存中,用一个str对象来表示。
最后是关闭文件,调用close()来关闭,由于文件对象会占用操作系统的资源,并且同意操作系统能同时打开的文件数量是有限的。
f.read()
f.close()
由于文件读取时很容易出现上面的IOError错误,后面的f.close就不会调用了,为了保证无论是否出错都保证文件关闭,所以可以使用try………finally……来实现。
try:
f=open("/path/to/file","r")
print(f.read())
finally:
if f:
f.close()
但由于每次这样写都很繁琐,所以python引入with语句来调用close( )方法。
with open(v"/path/to/file","r")as f:
print(f.read())
这样代码更加简洁。
调用read()会一次性读取文件的全部内容,为了防止内存暴躁,可以反复调用read(size),每次最多读取size个字节的内容。
另外,readline()可以每次读取一行内容,调用readlines可以一次读取所有内容并返回list。
文件的打开方式:
写文件:
写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符w还是wb表示写文本文件或写二进制文件。
可以反复地调用write()来写入文件,但务必要使用f.close()来关闭文件。只有调用了f.close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用它的话,可能就是一部分数据丢失,一部分数据写入磁盘,所以用with语句更保险。