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 别名
获取当前时间戳,间隔一秒,时间戳从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)获取格式化时间
把元组内的时间格式化显示,使用asctimeimport 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)制造模块
在命名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内置模块或包(第三方模块或包) -








浙公网安备 33010602011771号