小笨蛋学习python第五集


前言

本节知识要点:捕获异常、模块、包、文件的读写等。

一、异常捕获

高级语言通常都有内置一套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语句更保险。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值