Python----异常处理及模块

异常处理

当检测到⼀个错误时,解释器就⽆法继续执⾏了,反⽽出现了⼀些错误的提示,这就是所谓的"异常"。

python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。你可以使用该功能来调试python程序。

异常名称描述
AttributeError 对象没有这个属性
OSError 操作系统错误
ImportError 导入模块/对象失败
IndexError 序列中没有此索引(index)
KeyError 没有这个键
NameError 未声明/初始化对象 (没有属性)
SyntaxError Python 语法错误
TypeError 对类型无效的操作
ValueError 传入无效的参数
   
Warning 警告的基类

 

什么是异常

  • 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。

  • 一般情况下,在Python无法正常处理程序时就会发生一个异常。

  • 异常是Python对象,表示一个错误。

  • 当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

异常处理

  • 捕捉异常可以使用try/except语句。

  • try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。

  • 如果你不想在异常发生时结束你的程序,只需在try里捕获它。

  • 语法报错不能被捕获,

    try:
        # 可能会发生错误的语句
        print(name)
    # 捕获所有异常
    except:
        # 发生错误后执行的语句
        print("上面的代码出错了")
    print("代码执行结束")

     

    捕获单类异常,用as e   并打印e ,就把错误给你输出。as的作用:将捕获到的异常赋值给e
    捕获多个异常,在except后跟一个元组,元组内写入多个异常名称。

    try:
        # 可能会发生错误的语句
        print(name)
    # 捕获所有异常
    except NameError as e:
        print(e)
        # 发生错误后执行的语句
        print("上面的代码出错了")
    print("代码执行结束")

    # name 'name' is not defined
    # 上面的代码出错了
    # 代码执行结束

     

    异常的else
    else表示的是如果没有异常要执⾏的代码。

    try:
        print(1)
    except:
        print("代码有异常")
    else:
        print("代码执行结束")

     

    异常的finally

    finally表示的是⽆论是否异常都要执⾏的代码,例如关闭⽂件。

    try:
        print(1+"10")
    finally:
        print("代码执行结束")

     

    自定义异常

    自定义异常类,必须要继承Exception,并且包含init和str魔术方法(设置异常描述)

    在Python中,抛出⾃定义异常的语法为 raise 异常类对象 。

    需求:输入密码,如果密码长度不足6位,则抛出异常

    class Error_Project(Exception):
        def __init__(self, password_len_old, password_len_new):
            self.password_len_old = password_len_old
            self.password_len_new = password_len_new
    
        def __str__(self):
            return f"您输入的密码长度为{self.password_len_old}位,规定的密码长度应为{self.password_len_new}位,请重新输入"
    
    
    class main():
        try:
            password = input("请输入您要设置的密码:")
            if len(password) < 6:
                raise Error_Project(len(password),6)
        except Exception as e:
            print(e)
        else:
            print("密码创建成功")
    
    
    main()

     

    模块

    导入模块的方式,前三种为常用

    • import 模块名

    • from 模块名 import 功能名

    • from 模块名 import *

    • import 模块名 as 别名

    • from 模块名 import 功能名 as 别名

     

    时间模块time

     

     获取当前时间戳,间隔一秒,时间戳从1970年开始计时,每次增加一秒,现在一般以167开头

    # 导入时间模块
    import time
    while True:
        #把时间戳转为整数
        print(int(time.time()))
        # 每运行一次休息一秒
        time.sleep(1)

    获取当前时间

    从返回浮点数的时间戳方式向时间元组转换,只要将浮点数传递给如localtime之类的函数 

    import time
    now_time = time.localtime(time.time())
    print(now_time)

     

    获取格式化时间
    把元组内的时间格式化显示,使用asctime

    import time
    now_time1 = time.asctime(time.localtime(time.time()))
    print(now_time1)
    # Sun Feb  5 11:04:44 2023

     

    格式化日期

    python中时间日期格式化符号,需使用 strftime

     

     

    • %y 两位数的年份表示(00-99)

    • %Y 四位数的年份表示(000-9999)

     

     

    • %m 月份(01-12)

     

     

    • %d 月内中的一天(0-31)

     

     

    • %H 24小时制小时数(0-23)

    • %I 12小时制小时数(01-12)

     

     

    • %M 分钟数(00-59)

     

     

    • %S 秒(00-59)

    import time
    
    new_time = time.strftime("%Y年%m月%d日 %H:%M:%S", time.localtime())
    print(new_time)
    # 2023年02月05日 11:10:23

     

     

    获取某月日历

    Calendar模块有很广泛的方法用来处理年历和月历

     

    import calendar
    
    month_rl = calendar.month(2023, 2)
    print(month_rl)

     

     

    制造模块

    在Python中,每个Python⽂件都可以作为⼀个模块,模块的名字就是⽂件的名字。也就是说⾃定义模块名必须要符合标识符命名规则。 
    命名my_demo的Python文件中,,写一个函数
    再新建一个名称为new_demo的Python文件,即可把my_demo的Python文件视为一个模块导入,并运行其中的函数

     


    在当前Python文件中  if __name__ == '__main__':永远成立
    但在new_demo中打印my_demo中的__name__时,输出结果为my_demo
    my_demo中的 if __name__ == '__main__':  在new_demo中不成立
    所以在my_demo中 if __name__ == '__main__': 下面的函数在new_demo中不会被执行
    所以在new_demo中运行my_demo.demo()会报错

     

     from my_demo import *
    导入my_demo中的所有工具

     

    如果模块文件中有__all__变量,当使用from my_demo import *导入时,只能导入变量列表中的元素
    如下图所示,如想在new_demo中运行Demo类时可以再列表中再次加入  __all__ = ["Func","Demo"]

     

     

    制作包

     

    在PyCharm左侧目录中选择 [New] — [Python Package] — 输⼊包名:my_package — [OK] —新的创建成功。
    包创建成功后会自动生成一个__init__模块
    在包里面可以再创建很多模块

     

    从包里导入模块的方法一

     

     从包里导入模块的方法二
    在__init__.py文件中添加 __all__ = [],控制允许导入的模块列表


    自定义模块,或者包和新建Python的时候,文件名绝对不能用Python内置模块或包(第三方模块或包)

posted @ 2023-02-04 17:38  Cenb  阅读(234)  评论(0)    收藏  举报