乐之之

知而行乐,乐而行之,天道酬勤,学无止境。
异常处理和模块

一、异常

(一)什么是异常

  • 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
  • 一般情况下,在python无法正常处理程序时就会发生一个异常。
  • 异常python对象,表示一个错误。
  • 当python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

(二)异常处理

  • 当检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的”异常“。
  • python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。你可以使用该功能来调试python程序。
异常名称 描述
AttributeError 对象没有这个属性
OSError 操作系统错误
ImportError 导入模块/对象失败
IndexError 序列中没有此索引(index)
KeyError 没有这个键
NameError 未声明/初始化对象(没有属性)
SyntaxError python语法错误
TypeError 对类型无效的操作
ValueError 传入无效的参数
Warning 警告的基类

(三)异常的try和except

  • 捕捉异常可以使用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位,则抛出异常
class Error_my(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}--位的密码")

class main():
    try:
        pwd = input("请输入你所要创建的密码:")
        if len(pwd) < 6:
            raise Error_my(len(pwd),6)
    except Exception as a:
        print(a)

    else:
        print("创建密码完毕!")

二、模块

(一)导入模块的方式

  1. import模块名
  2. from 模块名 import 功能名
  3. from 模块名 import *
  4. import 模块名 as 别名
  5. from 模块名 import 功能名 as 别名

(二)时间模块time

1、获取当前时间

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

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

--------------------------------
time.struct_time(tm_year=2022, tm_mon=10, tm_mday=7, tm_hour=23, tm_min=19, tm_sec=5, tm_wday=4, tm_yday=280, tm_isdst=0)

2、获取格式化的时间

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

-----------------------------
Fri Oct  7 23:19:51 2022

3、格式化日期

  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)

 

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

-------------------------------------
2022-10-07 23:21:18

(三)获取某月日历

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

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

-----------------------------
   September 2022
Mo Tu We Th Fr Sa Su
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30

(四)制造模块

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

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

def demo1(a,b):
    print(a+b)

def demo2(a,b):
    print(a-b)

  再新建一个python文件,命名my_demo1,在里面调用my_demo模块

import my_demo
my_demo.demo1(10,20)
my_demo.demo2(10,20)

------------------------
30
-10

  如果⼀个模块⽂件中有 __all__ 变量,当使⽤ from xxx import * 导⼊时,只能导⼊这个列表中的元素。

  如my_demo,my_demo1文件为例

__all__ = ["demo1"]
def demo1(a,b):
    print(a+b)

def demo2(a,b):
    print(a-b)

  在my_demo1文件里调用时,只能调用__all__列表里的函数

from my_demo import demo1
demo1(10,20)
demo2(10,20)   # 报错

------------------------
30

(五)制作包

1、在文件中新建文件包(package)命名为my_package,然后创建my_demo6文件,并写入函数

def demo6():
    print("我是demo6")

2、再在新建文件包(my_package)中新建一个文件my_demo7,并写入函数

def demo7():
    print("我是demo7")

3、新建文件my_demo8,导入前两个文件中的函数,进行调用。

import my_package.my_demo6
import my_package.my_demo7

my_package.my_demo6.demo6()
my_package.my_demo7.demo7()

------------------------------------
我是demo6
我是demo7

4、若觉得调用函数名过于繁琐,导入模块时可从繁入简。

import my_demo6 as a
import my_demo7 as b
a.demo6()
b.demo7()

---------------------------
我是demo6
我是demo7
  •  注意:在同一个文件夹中,可用 import 模块名 as 别名。
  • 不是一个文件夹内可以用 from 模块名 import 功能名 as 别名。

posted on 2022-10-07 23:52  乐之之  阅读(49)  评论(0编辑  收藏  举报