●在程序开发中,如果对某些代码的执行不能确定是否正确,可以增加try( 尝试)来捕获异常
●捕获异常最简单的语法格式:
try:尝试执行的代码
except:出现错误的处理
●try尝试,下方编写要尝试代码,不确定是否能够正常执行的代码
●except 如果不是,下方编写尝试失败的代码
try:
# 提示输入一个数字
num = int(input("请输入一个整数:"))
except:
print("请输入正确的数字:")
捕获错误:根据错误类型捕获异常,捕获未知错误
# 完整捕获异常
try:
num = int(input("请输入一个整数:"))
result = 8 / num
print(result)
# 根据错误类型捕获异常
except ZeroDivisionError:
print("分母不能为0,请重新输入:")
# except ValueError:
# print("分母不是数字,请重新输入:")
# 捕获未知错误
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():
password = input("请输入密码:")
if len(password) >= 8:
return password
print("抛出异常")
# 创建异常对象,可以使用错误信息字符串作为参数
ex = Exception("密码长度不够")
# 抛出异常
raise ex
try:
print(input_password())
except Exception as result:
print(result)
from 。。。import 局部导入
# 全局变量
# hm_测试模块1
title = "模块1"
# 函数
def say_hello():
print("我是%s " % title)
# 类
class Dog(object):
pass
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
title = "模块2"
# hm_测试模块2
def say_hello():
print("我是%s " % title)
class Cat(object):
pass
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
from hm_测试模块1 import Dog
from hm_测试模块2 import say_hello
say_hello()
wangcai = Dog()
print(wangcai)
如果两个模块,存在同名的函数,那么后导入模块的函数,会覆盖掉先导入的函数
●开发时import 代码应该统一写在代码的顶部,更容易及时发现冲突
●一旦发现冲突,可以使用as关键字给其中一个工具起一个别名
__name__ 属性
●__name__属性可以做到,测试模块的代码只在测试情况下被运行,而在被导入时不会被执行!
●__name__是Python的一个内置属性,记录着一个字符串
●如果是被其他文件导入的,__name__就是 模块名
●如果是当前执行的程序__name__ 是__main__
包
●包是一个包含多个模块的特殊目录
●目录下有一个特殊的文件init_ .py
●包名的命名方式和变量名一致,小写字母+口
好处
●使用import包名可以一次性导入包中所有的模块
●要在外界使用包中的模块,需要在init_ . py中指定对外界提供的模块列表
init.py
from . import send_passage
from . import receive_message
send_passage.py
def send(num):
print("正在发送文件。。%s"%num)
receive_message.py
def receive():
return "这是来自100的短信"
hm_导入包
import hm_message
hm_message.send_passage.send("hello")
txt = hm_message.receive_message.receive()
print(txt)
结果:
正在发送文件。。hello
这是来自100的短信
制作模块压缩包
1.创建setup.py
2.构建模块
文件的基本操作
打开文件
读、写文件(读:将文件内容读入内存,写:将内存内容写入文件)
关闭文件
open函数负责打开文件,并且返回文件对象
read/write/close 三个方法都需要通过文件对象来调用
open函数的第一个参数是要打开的文件名(文件名区分大小写)。如果文件存在,返回文件操作对象 。如果文件不存在,会抛出异常
read方法可以一次性读入并返回文件的所有内容
close方法负责关闭文件
如果忘记关闭文件,会造成系统资源消耗,而且会影响到后续对文件的访问·注意:方法执行后,会把文件指针移动到文件的末尾
#1 打开一文件名(需要注意大小写)
file = open("README")
# 2,读取文件内容
text = file.read()
print(text)
# 3,关闭
file.close()
open函数不编辑访问方式,默认是只读情况,不可写
readline方法
可以一次读取一行内容,方法执行后,会把文件指针移动到下一行,准备再次读取
#打开文件
file = open.("README")
while True:
而真实:
#读取一行内容
text = file.readline()
#判断是否读到内容
if not text:
break
#每读取一行的末尾已经有了—个‘\’
print( text, end="")
首关闭文件
file.close( )
文件复制
小文件复制
打开一个已有文件,读取完整内容,并写入到另外一个文件
#1,打开
file_read = open( "README")
file_write = open( "REAMDE[复件]","w"")
#2.读、写
text = file_read.read()
file_write.write(text)
#3.关闭
file_read.close()
file_write.close()
大文件复制
打开一个已有文件,逐行读取内容,并顺序写入到另外一个文件中 m
#1,打开
file_read = open( "README")
file_write = open( "REAMDE[复件]","w"")
#2.读、写
while True:
text = file_read.readline()
if not text:
break
file_write.write(text)
#3.关闭
file_read.close()
file_write.close()
文件/目录常用管理操作
导入OS模块
file = open(r"a.txt", "w", encoding='utf-8')
text = ["关关雎鸠\n","在河之洲"]
# write()将字符串写入到文件中,,
# writelines将字符串列表写入到文件中,不添加换行符
# file.write(text)
file.writelines(text)
file.close()
with 关键字
可以自动管理上下文资源,不论什么原因跳出 with 块,都能确保文件正确的关闭,并且可以在代码块执行完毕后自动还原进入该代码块时的现场。
file= ["123\n","456"]
with open(r"b.txt","w") as file1:
file1.writelines(file)