异常处理和模块
异常处理
异常:
-
异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
-
一般情况下,在Python无法正常处理程序时就会发生一个异常。
-
异常是Python对象,表示一个错误。
-
当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
异常的分类:
| 异常名称 | 描述 |
|---|---|
| AttributeError | 对象没有这个属性 |
| OSError | 操作系统错误 |
| ImportError | 导入模块/对象失败 |
| IndexError | 序列中没有此索引(index) |
| KeyError | 没有这个键 |
| NameError | 未声明/初始化对象 (没有属性) |
| SyntaxError | Python 语法错误 |
| TypeError | 对类型无效的操作 |
| ValueError | 传入无效的参数 |
| Warning | 警告的基类 |
处理异常语法:try...except....
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 异常类对象 。
class Error_Exception(Exception):
def __init__(self, username, password, password_len):
self.username = username
self.password = password
self.password_len = password_len
def __str__(self):
return f"账号为:{self.username},密码为{self.password},密码长度为{len(self.password)}," \
f"不能小于{self.password_len}"
def try1():
try:
password_len = 6
username = input("请输入账号:")
password = input("请输入密码:")
if len(password) < password_len:
raise Error_Exception(username, password, password_len)
except Exception as exc:
print(exc)
else:
print("账号创建成功")
try1()
as:,它只声明了一个将保存exception对象的变量。如果说except Exception as e,那么e将是Exception类型的对象。
模块
模块的导入:
- import 模块名
- from 模块名 import 功能名
- from 模块名 import
- import 模块名 as 别名
- from 模块名 import 功能名 as 别名
制造模块
在Python中,每个Python⽂件都可以作为⼀个模块,模块的名字就是⽂件的名字。也就是说⾃定义模块名必须要符合标识符命名规则。
- 如果⼀个模块⽂件中有 all 变量,当使⽤ from xxx import * 导⼊时,只能导⼊这个列表中的元素。
__all__ = ['testA']
def testA():
print('testA')
def testB():
print('testB')
制作包
步骤:[New] — [Python Package] — 输⼊包名 — [OK] — 新建功能模块(有联系的模块)。
导入包
# 方法一
import 包名.模块名
包名.模块名.⽬标
# 方法二
# 注意:必须在 __init__.py ⽂件中添加 __all__ = [] ,控制允许导⼊的模块列表。
from 包名 import *
模块名.⽬标