异常
异常介绍
当python检测到一个错误时,解释器就无法继续执行了,反而出现一些错误提示,这就是所谓的“异常”。
python中出现错误通常叫:__Error
Java中出现错误通常叫:__Exception经典异常:
空指针异常
角标越界
类型转换错误
文件不存在异常
算数异常
print(1/0) # 算数异常 division by zero
age=int(input('请输入1-10数字:')) # 转换异常 invalid literal for int() with base
# 角标越界 list index out of range
list=[1,2,3]
print(list[10])
# 空指针异常 'NoneType' object has no attribute 'run'
class Person:
def run(self):
print('00000000000')
p1 = None
p1.run
异常处理
关键词:try:
有可能出现错误的代码
except Exception as e:
出现异常要执行的逻辑
else
没有出现异常执行的逻辑
finally
不管有没有出现异常都要执行
try:
i = i / 0
except Exception as e: # 出现异常输出,程序不会崩溃
print('出现异常了........')
else: # 没有异常
print('没有出现异常.........')
finally: # 代码肯定会执行,释放资源(文件操作-打开文件-写入内容-关闭文件的逻辑写到finally中)
print('这是finally')
print('哈哈哈哈....')
异常信息的传递
可以在代码的任何地点处理这个异常,只要try中包含异常的部分就可以。出现异常后系统会直接处理try中包含的代码
抛出异常
# 抛出异常
# 主动抛出异常的目的,直接让程序报错,直到程序在那个位置
# 关键词:raise 使用方法:raise Exception
# 请输入年龄,判断
age = int(input('请输入年龄:\n'))
if age <= 0 or age >= 140:
# print('年龄不合法')
raise Exception('年龄非法') # 让程序直接报错,报错内容自己可以定义
else:
print('年龄合法')
类型判断
关键词:isinstance 判断数据类型是否是什么
# 类型判断
a = 12 # int
b = 'hello' # str
c = ['1', '2'] # list
print(isinstance(a, int)) # True
print(isinstance(a, str)) # False
# 判断字符串不能为空
def isEmpty(s):
if s == None:
return True
if s == '':
return True
if isinstance(s, str): # 判断s是否是字符串
if s.strip() == '':
return True
else:
return False
print(isEmpty([])) # 传入空列表,返回False
导包
模块
- 在python中,代码是放在扩展名为py 的文件中的;一个.py 文件就是一个模块(Module)
- 又可以把许多模块按照功能放到不同的目录中来组织模块;这些组织存放模块文件的目录,我们称之为包
python中的分包
Python 模块(Module),其实就是一个Python 文件,以 .py 结尾。
模块让你能够有逻辑地组织你的 Python 代码段。
把相关的代码分配到一个模块里能让你的代码更好用,更易懂。
模块能定义函数,类和变量,模块里也能包含可执行的代码。
模块的名字就是py文件名。
不同模块中的变量互不影响(同名也可以)。
包的概述
模块多了,也容易同名。这个时候就有了包,不同包中的模块互不影响(即使同名)。包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境,简单来说,包就是文件夹。(规范:要有__init__.py 文件)
包的写法
多级包
Android中区分唯一的应用APP 通过包名来区分。
com.baidu
com.tencent
com.alibaba
com.58tc
com.yuhuayuanzhi
通常包命名规则
按照类型进行二次分包
com.baidu.domain #用来方式Person Student
com.baidu.dao #实现数据逻辑(操作数据库)
com.baidu.service #实现业务逻辑
com.baidu.controller #控制层
com.baidu.utils #工具包
com.yuhuayuanzhi.testUtils 下存放的都是 工具文件.Py
python模块中基本导入
Import os
模块就好比是工具包,要想使用这个工具包的工具,就需要导入这个模块。
在Python中用关键字import来引入模块,比如要引入模块(文件),math,就可以在文件最开始的地方用import math来引入。
Import os
Import math
# os 文件操作
# math 处理数学操作
# 第一种导包方式:from 模块名称 import 函数名字
from math import sqrt # 导入math包
print(sqrt(9)) # 3.0
# 第二种导包方式:导入到当前模块,通过模块名称,调用函数
import math
print(math.sqrt(4)) # 2.0
导入自定义工具包
s = 'hello'
# 直接导入对应的函数,通过函数直接调用
from com.baidu.utils.My_Utils import isEmpty
print(isEmpty(s)) # False
# 导入对应的模块,通过模块调用对应函数
from com.baidu.utils import My_Utils
print(My_Utils.isEmpty(s)) # False
导入自定义的类
# from com.baidu.pojo.person import * # *代表模块内的所有内容,也可以写具体的哪个类
from com.baidu.pojo import person # 直接导入模块
un = input('请输入你的用户名:\n')
pwd = input('请输入你的密码:\n')
# 调用person模块,判断是否登陆成功
person = person.Person() # 导入的是模块,需要声明是模块中的哪个类,要是直接导入类,不需要再次声明
flag = person.checkLogin(un, pwd)
if flag:
print('登陆成功')
else:
print('登陆失败')