异常处理
当检测到⼀个错误时,解释器就⽆法继续执⾏了,反⽽出现了⼀些错误的提示,这就是所谓的"异常"。
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 *
模块名.⽬标
标签:11,__,模块,time,print,import,异常
From: https://www.cnblogs.com/blog4lyh/p/16842025.html