try:
尝试执行的代码
except:
出现的错误
try 尝试,下方编写要尝试代码,不确定是否能够正常执行的代码
except 如果不是,下方编写尝试失败的代码
try:
# 不能确定正确执行的代码
num = int(input("请输入一个整数:"))
except:
# 错误的处理代码
print("请输入正确的整数")
print("-" *50)
try:
# 尝试执行的代码
except 错误类型1:
# 针对错误类型1,对应的代码处理
pass
except (错误类型2,错误类型3):
# 针对错误类型2和3,对应的代码处理
pass
except Exception as result:
print("未知错误 %s" % result)
当python解释器抛出异常时,最后一行错误信息的第一个单词,就是错误类型
需求:提示用户输入一个整数,使用8除以用户输入的整数并且输出
案例:
try:
# 提示用户输入一个整数
num = int(input("请输入一个整数:"))
# 使用8除以用户输入的整数并且输出
result = 8 / num
print(result)
except ZeroDivisionError:
# 错误的处理代码
print("除0错误")
except ValueError:
# 错误的处理代码
print("请输入正确的整数")
except
# 捕获未知错误
except Exception as result:
print("未知错误 %s " %result)
try:
#尝试执行的代码
pass
except 错误类型1:
# 针对错误类型1,对应的代码处理
pass
except 错误类型2:
# 针对错误类型2,对应的代码处理
pass
except (错误类型3,错误类型4):
# 针对错误类型3,4,对应的代码处理
pass
except Exception as result:
#打印错误信息
print(result)
else:
# 没有异常才会执行的代码
finally:
# 无论是否有异常,都会执行的代码
print("无论是否有异常,都会执行的代码")
else 只有在没有异常时才会执行的代码
finally 无论是否有异常,都会执行的代码
案例:
try:
# 提示用户输入一个整数
num = int(input("请输入一个整数:"))
# 使用8除以用户输入的整数并且输出
result = 8 / num
print(result)
except ZeroDivisionError:
# 错误的处理代码
print("除0错误")
# 捕获未知错误
except Exception as result:
print("未知错误 %s " %result)
else:
print("尝试成功")
finally:
print("无论是否出现错误都会执行的代码")
def demo1():
return int(input("请输入一个整数:"))
def demo2():
return demo1()
# 利用异常的传递性,在主程序中捕获异常
try:
print(demo2())
except Exception as result:
print("未知错误 %s " %result)
def input_password():
# 1.提示用户输入密码
pwd = input("请输入一个整数:")
# 2.判断密码长度 》=8,返回用户输入的密码
if len(pwd) >= 8:
return pwd
# 3.如果 <8 主动抛出异常
print("主动抛出异常")
# 3.1 创建异常对象 --- 可以使用错误信息字符串作为参数
ex = Exception("密码长度不够")
# 3.2 主动抛出异常
raise ex
# 提示用户输入密码
try:
print(input_password())
except Exception as result:
print("未知错误 %s " %result)
import 模块1
import 模块2
提示:在导入模块时,每个导入应该独占一行
导入之后,通过模块名.
使用模块提供的工具 ---- 全局变量、函数、类
# 全局变量
title = "模块1"
# 函数
def say_hello():
print("我是 %s " % title)
# 类
class Dog(object):
pass
testmodule2.py代码
# 全局变量
title = "模块2"
# 函数
def say_hello():
print("我是 %s " % title)
# 类
class Cat(object):
pass
main.py代码
import testmodule_1
import testmodule_2
testmodule_1.say_hello()
testmodule_2.say_hello()
dog = testmodule_1.Dog()
print(dog)
cat = testmodule_2.Cat()
print(cat)
如果模块的名字太长,可以使用as指定模块的名称,以方便在代码中使用
import 模块名 as 模块别名
注意:模块别名 应该符合大驼峰命名法
import testmodule_1 as DogModule
import testmodule_2 as CatModule
DogModule.say_hello()
CatModule.say_hello()
dog = DogModule.Dog()
print(dog)
cat = CatModule.Cat()
print(cat)
如果希望从某一个模块中,导入部分工具,就可以使用from...import
的方式
import 模块名
是一次性把模块中所有工具全部导入,并且通过模块名/别名 访问
# 从模块中导入某一个工具
from 模块名1 import 工具名
导入之后,不需要通过 模块名.
,可以直接使用模块提供的工具-----全局变量、函数、类
from testmodule_1 import Dog
from testmodule_2 import say_hello
say_hello()
dog = Dog()
print(dog)
注意:如果两个模块,存在同名的函数,那么后导入模块的函数,会覆盖掉先导入的函数
开发时import 代码应该统一写在代码的顶部,更容易及时发现冲突,一旦发现冲突,可以使用as
关键字给其中一个工具起一个别名
from testmodule_1 import say_hello as module1_say_hello
from testmodule_2 import say_hello
module1_say_hello()
say_hello()
# 从 模块 导入 所有工具
from 模块1 import *
注意:这种方式不推荐使用,因为函数重名并没有任何的提示,出现问题不好排查
在开发时,给文件起名,不要和系统的模块文件重名
python中每一个模块都有一个内置属性__file__
可以查看模块的完整路径
示例:
import random
# 查看模块的完整路径
print(__file__)
rand = random.randint(0,10)
print(rand)
注意:如果当前目录下,存在一个random.py的文件,程序就无法正常执行了,这个时候,python的解释器会加载当前目录下的random.py而不会加载系统的random模块。
一个独立的python文件就是一个模块
在导入文件时,文件中所有没有任何缩进的代码都会被执行一遍
全局变量、函数、类是模块向外界提供的工具,直接执行的代码不是向外界提供的工具
__name__
属性__name__
属性可以做到,测试模块的代码只在测试情况下被运行,而在被导入时不会被执行。__name__
是python的一个内置属性,记录着一个字符串__name__
就是模块名,如果是当前执行的程序,__name__
是__main__
# 全局变量
title = "模块1"
# 函数
def say_hello():
print("我是 %s " % title)
if __name__ == "__main__":
print("模块测试代码")
包是一个包含多个模块的特殊目录。目录下有一个特殊的文件__init__.py
,包的命名方式和变量名一致,小写字母+_
。
使用 import 包名
可以一次性导入包中所有的模块
__init__
.py要在外界使用包中的模块,需要在__init__.py中指定对外界提供的模块列表
# 从 当前目录 导入 模块列表
from . import send_message
from . import receive_message
新建一个hm_message的包
在目录下,新建两个文件send_message和receive_message
在send_message文件中定义一个send函数
在receive_message文件中定义一个receive函数
在外部直接导入hm_message的包
文件结构树:
新建包的方法:选中项目名–>右键新建–>python软件包(python package)
其中:新建的包中会自动包含一个__init__
.py文件
send_message代码:
def send(text):
print("正在发送 %s ...." % text)
receive_message代码:
def receive():
return "这是来自100xx的短信"
__init__
.py文件代码:
from . import send_message
from . import receive_message
main文件代码:
import hm_message
hm_message.send_message.send("hello")
txt = hm_message.receive_message.receive()
print(txt)
如果希望自己开发的模块,分享给其他人,可以按照以下步骤操作
from distutils.core import setup
setup(name="hm_message",#包名
version="1.0",#版本
description="接收消息和发送消息",#描述信息
long_description="完整的发送和接收消息模块",#完整描述信息
author="dts",#作者
author_email="[email protected]",#作者邮箱
url="www.baidu.com",#主页
py_modules=["hm_message.send_message",
"hm_message.receive_message"])
win+r快捷键打开运行窗口,运行窗口输入cmd进入命令行
将命令行路径切换到setup.py文件所在目录,setup文件所在目录----D:\softwarework\pycharm\test02
切换盘符 ,由c盘 —> d盘
切换具体路径
linux系统下两步骤:通过命令行操作
$ tar -zxvf hm_message-1.0.tar.gz
$ sudo python3 setup.py install
window系统下实际演示安装模块
找到模块安装文件夹,直接删除就可以卸载模块
第三方模块通常是指由知名的第三方团队开发的并且被程序员广泛使用的python包\模块
例如:pygame就是一套非常成熟的游戏开发模块
pip是一个现代的,通用的python包管理工具,提供了对python包的查找、下载、安装、卸载等功能
安装和卸载命令如下:
pip install 模块名
pip uninstall 模块名
pip install pygame
pip uninstall pygame