九、Python异常、模块与包

一、了解异常

1.什么是异常:

异常就是程序运行的过程中出现了错误

2.bug是什么意思:

bug就是指异常的意思,因为历史因为小虫子导致计算机失灵的案例,所以延续至今,bug就代表软件出现错误。

二、异常的捕获方法

  1. 为什么要捕获异常

在可能发生异常的地方,进行捕获。当异常出现的时候,提供解决方式,而不是任由其导致程序无法运行。

  1. 捕获异常的语法
try:
    可能要发生异常的语句
except[异常 as 别名]:
    出现异常的准备手段
[else]:
    未出现异常时应做的事情
[finally:]
    无论是否出现异常都会执行的事情
  1. 如何捕获所有异常

异常的种类多种多样,如果想要不管什么类型的异常都能捕获到,那么使用:

  • expext:

  • expect Expection:

try:
    n = int(input("请输入一个整数:"))
    result = 100 / n
    print("结果为:", result)
except ValueError:
    print("请输入一个整数!")
except ZeroDivisionError:
    print("除数不能为0!")
except Exception as e:
    print("发生了一个异常:", e)
finally:
    print("程序执行完毕!")

在except块中,我们可以使用多个except语句来捕获不同类型的异常。如果捕获到指定的异常,则执行相应的处理代码;如果没有捕获到任何异常,则不执行任何代码。最后一个except块中使用as关键字将异常对象赋值给e变量,这样可以在处理异常时获取一些有用的信息。。在这个例子中,无论是否发生异常,都会执行finally块中的代码。通常情况下,finally块中的代码用于清理资源或进行一些善后工作,例如关闭文件或释放锁等等。

*异常的传递

def func1():
    print("fun1 开始执行")
    num = 1 / 0
    print("fun1 结束执行")
# 定义一个无异常的方法,调用上面的方法

def func2():
    print("fun2 开始执行")
    func1()
    print("fun2 结束执行")
# 定义一个方法,调用上面的方法

def main():
    try:
        func2()
    except Exception as e:
        print(f"出现的异常是:{e}")

main()
作用:
  • 在调用函数时,出现了异常,但是这个异常并没有在函数内部被处理。因此,该异常被传递到了调用该函数的地方,也就是在程序的主体中。然后,程序在主体中捕获了这个异常,并输出了相应的错误消息。在编写程序的时候,在适当的地方(合理的地方)捕获异常,从而避免异常的传递,是非常重要的。

三、异常综合案例

def func1():
    print("fun1 开始执行")
    num = 1 / 0
    print("fun1 结束执行")
# 定义一个无异常的方法,调用上面的方法

def func2():
    print("fun2 开始执行")
    func1()
    print("fun2 结束执行")
# 定义一个方法,调用上面的方法

def main():
    try:
        func2()
    except Exception as e:
        print(f"出现的异常是:{e}")
# 调用函数
main()

在调用函数时,出现了异常,但是这个异常并没有在函数内部被处理。因此,该异常被传递到了调用该函数的地方,也就是在程序的主体中。然后,程序在主体中捕获了这个异常,并输出了相应的错误消息。在编写程序的时候,在适当的地方(合理的地方)捕获异常,从而避免异常的传递,是非常重要的。

四、Python模块

1.什么是模块?

模块就是一个Python代码文件,内含类、函数、变量等,我们可以导入进行使用。

2.如何导入模块

[from 模块名] import [模块| |变量函数] [as 别名]

3.注意事项

  • from可以省略,直接import即可

  • as别名可以省略

  • 通过”. ”来确定层级关系

  • 模块的导入一般写在代码文件的开头位置

"""
Python的模块导入
"""

# 使用import导入time模块的sleep功能(函数)
import time         # 导入Python内置的time模块(time.py这个代码文件)
print("你好")
time.sleep(5)       # 通过 . 就可以使用模块内部的全部功能(类,函数,变量)
print("你好")

# 使用from导入time的sleep功能(函数)
from time import sleep
print("等待")
sleep(2)
print("完成")

# 使用 * 导入time模块的全部功能
from time import *      # * 表示全部的意思
print("wait")
sleep(3)
print("ok")

# 使用as给特定功能加上别名
import time as t
print("等待")
sleep(2)
print("finsh")

from time import sleep as sl
import time as t
print("wait")
sleep(2)
print("finsh")

*自定义模块并导入

1.如何自定义模块并导入?

在Python代码文件中正常写代码即可,通过import、from关键字和导入Python内置模块一样导入即可使用。

2._main_变量的功能是?

if __main__==“__main__”

表示,只有当程序是直接执行的才会进入if内部,如果是被导入的,则if无法进入

*可以将模块中需要执行的代码限制在只有在该模块被直接运行时才会执行,而不是在模块被引入时就自动执行,从而避免了不必要的执行开销。

3注意事项

  • 不同模块,同名的功能,如果都被导入,那么后导入的会覆盖先导入的

  • __all__ 变量 可以控制import*的时候哪些功能可以被导入

*这样做有助于保护模块的各个部分,从而使模块成为更好的、更安全的编程构建块。

"""
演示自定义模块
"""
# 导入自定义模块使用
import my_module1
my_module1.test(1, 2)
# 上下两种方式作用相同
from my_module1 import test
test(2, 3)
# 导入不同的模块的同名功能
from  my_module1 import test
from  my_module2 import test
test(1,2)

# __main__变量
from my_module1 import test

# __all__变量
from my_module1 import test2

五、Python包

1.什么是Python的包?

包就是一个文件夹,里面可以存放许多Python的模块(代码文件),通过包,在逻辑上将一批模块归为一类,方便使用。

2.__init__.py文件的作用?

创建包会默认自动创建的文件,通过这个文件来表示一个文件夹是Python的包,而非普通的文件夹。

3.__all__变量的作用?

同模块中学习到的是一个作用,控制 import* 能够导入的内容

# 三个层级选择性使用

# 层级一
import mypackage.module1
import mypackage.module2
mypackage.module1.greet()
mypackage.module2.multiply()

# 层级二
from mypackage import module1
from mypackage import module2
module1.greet()
module2.multiply()

# 层级三
from mypackage.module1 import greet
from mypackage.module2 import multiply
greet()
multiply()

六、安装第三方Python包

1.什么是第三方包?有什么作用?

第三方包就是非Python官方内置的包,可以安装它们扩展功能,提高开发效率。

2.如何安装?

  • 在命令提示符内:

  • pip install 包名称

  • 在PyCharm中安装

教程网址https://www.bilibili.com/video/BV1qW4y1a7fU?t=515.1&p=97

Python异常、模块、包:综合案例

新建my_untils工具包,再新建file_until.py和str_until.py两个模块

# file_until.py
def print_file_info(file_name):
    """
    功能是:将给定路径的文件内容输出到控制台中
    :param file_name:
    :return:None
    """
    f = None
    try:
        f = open(file_name,"r",encoding="UTF-8")
        content = f.read()
        print("文件的全部内容是:")
        print(content)
    except Exception as e:
        print(f"程序出bug了,原因是:{e}")
    finally:
        if f:           # 如果变量是None,表示False,如果有任何内容,就是True
            f.close()


def append_to_file(file_name,data):
    """
    功能:将给定的数据追加到指定的文件中
    :param file_name:指定的文件的路径
    :param data:指定的数据
    :return:None
    """
    f = open(file_name,"a",encoding="UTF-8")
    f.write(data)
    f.write("\n")
    f.close


if __name__ == '__main__':
    #print_file_info("D:/pythonProject2/文件操作的综合案例.txt")
    append_to_file("D:/pythonProject2/练习2.txt","study python")
def str_reverse(s):
    """
    功能是将字符串反转
    :param s:将被反转的字符串
    :return:反转后的字符串
    """
    return s[::-1]

def sustr(s, x, y):
    """
    功能是按照给定的下标完成给定字符串的切片
    :param s:即将被切片的字符串
    :param x:切片的开始下标
    :param y:切片的结束下标
    :return:切片完成后的字符串
    """
    return s[x:y]

if __name__ == '__main__':
    print(str_reverse("黑马程序员"))
    print(sustr("黑马程序员",1,3))
import  my_untils.str_util
from  my_untils import file_util

print(my_untils.str_util.str_reverse("异常、模块和包综合案例"))
print(my_untils.str_util.sustr("itheima",0,4))

file_util.append_to_file("D:/pythonProject2/练习2.txt","itheime")
file_util.print_file_info("D:/pythonProject2/练习2.txt")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值