【蟒蛇】14、异常和模块-学Python黑马程序员个人笔记

  1. 参考视频
  2. 异常的捕获
  3. 异常的传递⭐
  4. 模块的导入和概念
  5. 自定义模块并导入
  6. 自定义Python包
  7. 安装第三方包
  8. 异常-模块-包综合案例

参考视频

黑马程序员python教程,8天python从入门到精通

异常的捕获

# 基本捕获语法
try:
    f = open('D:/Pycharm-beginner/bug.txt', 'r', encoding='UTF-8')
except:
    print('出现异常了,引文文件不存在,我将open的模式,改为w模式取打开')
    f = open('D:/Pycharm-beginner/bug.txt', 'w', encoding='UTF-8')
"""
出现异常了,引文文件不存在,我将open的模式,改为w模式取打开
"""
# 捕获指定的异常
try:
    print(name)
except NameError as e:       # 只捕获了NameError的异常,其他不能捕获
    print('出现了变量未定义的异常')
    print(e)
"""
出现了变量未定义的异常
name 'name' is not defined
"""
# 捕获多个异常
try:
    1/0
except (NameError, ZeroDivisionError) as e:
    print('出现了变量未定义或者除以0的异常')
    print(e)
"""
出现了变量未定义或者除以0的异常
division by zero
"""

# 未正确设置捕获异常类型,将无法捕获异常
try:
    1/0
except NameError as e:
    print('出现了变量未定义的异常')
"""
division by zero………………………………
"""


# 捕获所有异常
try:
    1/0
except Exception as e:
    print('出现异常了')
"""
出现异常了
"""
# 异常else
try:
    print('hello')
except Exception as e:
    print('出现异常了')
else:
    print('haha,没有异常')
"""
hello
haha,没有异常
"""

# 异常的finally 一定要执行
try:
    f = open('D:/Pycharm-beginner/yichang.txt', 'r', encoding='UTF-8')
except Exception as e:
    print('出现异常了')
    f = open('D:/Pycharm-beginner/yichang.txt', 'w', encoding='UTF-8')
else:
    print('haha,没有异常')
finally:
    print('我是finally,有没有异常都执行')
f.close()
"""
出现异常了                #  except执行了写入yichang文件
我是finally,有没有异常都执行
"""

异常的传递⭐

# 定义一个出现异常的方法
def func1():
    print('func1 开始执行')
    num = 1/0              # 肯定有异常,除以0的异常
    print('func1 结束执行')
# 定义一个无异常的方法,调用上面的方法
def func2():
    print('func2 开始执行')
    func1()
    print('func2 结束执行')
# 定义一个方法,调用上面的方法
def main():
    func2()

main()
# 先执行main,再执行func2,print(func2 开始执行),
# 最后执行func1,print(func1 开始执行),接着1/0报错,再传递


# Traceback (most recent call last):
#   File "D:\Pycharm-beginner\pythonProject\黑马程序员\9_02异常的传递.py", line 15, in <module>
#     main()
#   File "D:\Pycharm-beginner\pythonProject\黑马程序员\9_02异常的传递.py", line 13, in main
#     func2()
#   File "D:\Pycharm-beginner\pythonProject\黑马程序员\9_02异常的传递.py", line 9, in func2
#     func1()
#   File "D:\Pycharm-beginner\pythonProject\黑马程序员\9_02异常的传递.py", line 4, in func1
#     num = 1/0              # 肯定有异常,除以0的异常
#           ~^~
# ZeroDivisionError: division by zero
# func2 开始执行
# func1 开始执行

# 捕获异常


def main():
    try:
        func1()
    except Exception as e:
        print(f'出现异常了,异常的信息是:{e}')


main()
"""
func2 开始执行
func1 开始执行
出现异常了,异常的信息是:division by zero
"""


def main():
    try:
        func1()
    except Exception as e:
        print(f'出现异常了,异常的信息是:{e}')


main()
"""
func1 开始执行
出现异常了,异常的信息是:division by zero
"""

# 由于有异常的传递,并不需要捕获最底层的异常,
# 高层级的异常异可以捕获,会传递上来

模块的导入和概念

# 模块就是一个Python文件,里面有类、函数、变量等,可以导入模块去使用
# [from 模块名] import [模块 | 类 | 变量 | 函数 | *] [as]
# []表示可选内容(import必须,其他可选是否写出

# 使用import导入time模块使用sleep功能(函数)
# 按住ctrl同时点击time会弹出time.py文件
import time    # 导入Python内置的time模块(time.py这个代码文件)
print('你好')
time.sleep(5)  # 通过. 就可以使用模块内的全部功能
print('我好')
"""
你好
(过5秒显示下一行)
我好
"""

# 使用from导入time的sleep功能(函数)
from time import sleep
print('你好')
sleep(5)
print('我好')
"""
你好
(过5秒显示下一行)
我好
"""

# 使用 * 导入time模块的全部功能
from time import *   # *表示全部的意思
print('你好')
sleep(5)
print('我好')
"""
你好
(过5秒显示下一行)
我好
"""

# 使用as给特定功能加上别名(名字简单化)
import time as t
print('你好')
t.sleep(5)
print('我好')
"""
你好
(过5秒显示下一行)
我好
"""

from time import sleep as sl
print('你好')
sl(5)
print('我好')
"""
你好
(过5秒显示下一行)
我好
"""

自定义模块并导入

# 导入自定义模块使用
import my_module1
my_module1.test(1, 2)
from my_module1 import test
test(1, 2)
"""
3
3
"""

# 导入不同模块的同名功能,后面的会把前面的覆盖掉
from my_module1 import test
from my_module2 import test
test(1, 2)
"""
-1
"""

# 当my_module1中添加了test(1, 2)结果后(作为测试),
# 上述from my_module2 import test可直接得到结果

# __main__变量
# 可以在my_module1中测试结果,又可以在这个文件中导入模块不会出结果
# if__main__ == '__main__'表示只有当程序是直接执行的才会进入if内部
# 如果是被导入的,则if无法进入


# __all__变量

# # 当另一个my_module.py文件中有如下代码时:
# __all__ = ['test_A']
#
#
# def test_A():
#     print('testA')
#
#
# def test_B():
#     print('testB')
#
# # 这个文件的代码
# from my_module import *
#
# test_A(1, 2)
# test_B(1, 2)
# 结果只有test_A,test_B不能用
# *代表所有,但*来自于my_module的定义,all只有test_A

自定义Python包

# Python包(文件夹)即多个module模块
# 创建时必须有__init__.py文件,没有的话就变成普通文件夹

# 创建一个包,my_package,并创建my_module1和my_module2文件
# 导入自定义的包中的模块,并使用
import my_package.my_module1
import my_package.my_module2


my_package.my_module1.info_print1()
my_package.my_module2.info_print2()
"""
我是模块1的功能函数代码
我是模块2的功能函数代码
"""

from my_package import my_module1
from my_package import my_module2


my_module1.info_print1()
my_module2.info_print2()
"""
我是模块1的功能函数代码
我是模块2的功能函数代码
"""

from my_package.my_module1 import info_print1
from my_package.my_module2 import info_print2
info_print1()
info_print2()
"""
我是模块1的功能函数代码
我是模块2的功能函数代码
"""

# 通过__all__变量,控制import*
# 在__init__.py文件中输入
# __all__ == ['my_module1']
# 调用:
# from my_package import *
# my_module1.info_print1()
# my_module2.info_print2()
# 结果:
# my_module2不在里面,只会导入my_module1

安装第三方包

# 我们知道,包可以包含一堆的Python模块,而每个模块又内含许多的功能。
# 所以,我们可以认为:一个包,就是一堆同类型功能的集合体。
# 在Python程序的生态中,有许多非常多的第三方包(非Python官方),可以极大的帮助我们提高开发效率,
# 如:
# ·科学计算中常用的:numpy包
# ·数据分析中常用的:pandas包
# ·大数据计算中常用的:pyspark、apache-flink包
# ·图形可视化常用的:matplotlib、pyecharts
# ·人工智能常用的:tensorflow
# ·等

# 安装第三方包 -pip
# 方法一:cmd中,输入:pip install numpy(国外安装网速慢)(已安装)
# 国内网址,输入:pip install -i http://pypi.tuna.tsinghua.edu.cn/simple numpy
# 方法二:在pycharm设置中-pycharm解释器查看安装包,点击“+”搜第三方包

异常-模块-包综合案例

# 创建一个自定义包  名称为:my_utils(我的工具)
# 在包内提供2个模块
#   str_util.py (字符串相关工具,内含:)
#       函数:str_reverse(s),接受传入字符串,将字符串反转返回
#       函数:substr(s,x,y),按照下标x和y,对字符串进行切片
#   file_util.py(文件处理相关工具,内含:)
#       函数:print_file_info(file_name),接收传入文件的路径,打印文件的全部内
#       容,如文件不存在则捕获异常,输出提示信息,通过finally关闭文件对象
#       函数:append_to_file(file_name,data),接收文件路径以及传入数据,将数据
#       追加写入到文件中
#
# 构建出包后,尝试着用一用自己编写的工具包。

# 创建my_utils包,在包内创建:str_util.py和 file_utilpy 2个模块,并提供相应的函数


import _9_07package_my_utils._9_07str_util
from _9_07package_my_utils import _9_07file_util


print(_9_07package_my_utils._9_07str_util.str_reverse('黑马程序员'))
print(_9_07package_my_utils._9_07str_util.substr('itheima', 0, 4))
"""
员序程马黑
ithe
"""

_9_07file_util.print_file_info('D:/Pycharm-beginner/test_append.txt')
"""
文件的全部内容如下:
黑马程序员
"""

# 追加数据
_9_07file_util.append_to_file('D:/Pycharm-beginner/test_append.txt', 'itheima')
_9_07file_util.print_file_info('D:/Pycharm-beginner/test_append.txt')
"""
文件的全部内容如下:
黑马程序员
itheima
"""

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 3415226167@qq.com
资源 相册