11.异常处理与模块

异常处理

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

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:
    可能会发送错误的语句
except:
    发生错误后执行的语句

快速体验

try:
    print(name)
except NameError:
    print("发生错误")

如果尝试执⾏的代码的异常类型和要捕获的异常类型不⼀致,则⽆法捕获异常。

捕获多个异常

try:
     print(1/0)
except (NameError, ZeroDivisionError):
     print('有错误')

异常的else

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

try:
    print(123+"456")
except Exception:
    print(456)

else:
    print(789)

异常的finally

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

try:
    f = open("test.txt","r")
    print("没有异常,正常创建")
except Exception:
    print("出现异常,重新创建")
    f = open("test.txt","w")
finally:
    f.close()

自定义异常

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

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

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

# -*- coding:utf-8 -*-

class Error_Project(Exception):
    def __init__(self,password,password_len):
        self.password = password
        self.password_len = password_len

    def __str__(self):
        return f"你输入的密码长度为---{self.password}---,不能少于---{self.password_len}---字符"

def main():
    try:
        pwd = input("请输入密码:")
        if len(pwd) < 6:
            raise Error_Project(len(pwd),6)
    except Exception as exc:
        print(exc)
    else:
        print("密码创建完毕!")

main()

模块

导入模块的方式

  • import 模块名

  • from 模块名 import 功能名

  • from 模块名 import *

  • import 模块名 as 别名

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

时间模块time

获取当前时间

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

import time
now_time1 = time.localtime(time.time())
print(now_time1)
# time.struct_time(tm_year=2022, tm_mon=9, tm_mday=7, tm_hour=15, tm_min=52, tm_sec=32, tm_wday=2, tm_yday=250, tm_isdst=0)

获取格式化的时间

import time
now_time2 = time.asctime(time.localtime(time.time()))
print(now_time2)

格式化日期

import time
# 格式化成2022-09-70 时:分:秒形式
now_time3 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print(now_time3)

python中时间日期格式化符号

  • %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)

获取某月日历

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

import calendar
# 获取2022年,9月份日历
mouth_rl = calendar.month(2022,9)

制造模块

在Python中,每个Python⽂件都可以作为⼀个模块,模块的名字就是⽂件的名字。也就是说⾃定义模块名必须要符合标识符命名规则。

新建一个python文件,命名my_demo,并在里面写一个函数

# -*- coding:utf-8 -*-
def func(a,b):
    print(a+b)

class Func(object):
    def __init__(self,a,b):
        self.a = a
        self.b = b

    def func_demo(self):
        print(self.a+self.b)
如果⼀个模块⽂件中有 __all__ 变量,当使⽤ from xxx import * 导⼊时,只能导⼊这个列表中的元素。
__all__ = ['testA']
def testA():
     print('testA')
def testB():
     print('testB')

调用模块

import 模块名

制作包

[New] — [Python Package] — 输⼊包名 — [OK] — 新建功能模块(有联系的模块)。

导入包

# 方法一
import 包名.模块名
包名.模块名.⽬标
# 方法二
# 注意:必须在 __init__.py ⽂件中添加 __all__ = [] ,控制允许导⼊的模块列表。
from 包名 import *
模块名.⽬标
posted @   做笔记的一天  阅读(56)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示