一、语法
try:
<语句> #正常运行的代码
except <预知的异常类型>:
<语句> #在try中产生异常后要执行的内容
else:
<语句> #没有异常发生要执行的内容
二、作用
- try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。
- 如果你不想在异常发生时结束你的程序,只需在except里捕获它。
三、使用except不带异常类型
try:
正常的操作
except :
发生异常,执行这块代码
else:
如果没有异常执行这块代码
try:
age = input("请输入你的年纪:")
#age = int(input("请输入你的年纪:"))
if age>=18:
print("已成年")
else:
print("未成年")
except: #这里不填异常的类型
print("您的年龄类型为str,请重新考虑")
else:
print("您可真年轻!!!")
四、使用except而带多种异常类型
- 用 as 变量名 输出异常信息
try:
正常的操作
except (异常1,异常类型2,...) as result:
发生异常,执行这块代码
else:
如果没有异常执行这块代码
try:
li=[1,2,3,4,5]
print(li[5])
except (TypeError,IndexError,KeyError) as result:
print("您的索引好像没有那么多,请重新考虑!",result)
else:
print("您可真棒!!!")
五、try-finally语句:语句无论是否发生异常都将执行最后的代码
try:
<语句>
finally:
<语句>
try:
li=[22,66,33,44,99]
i=int(input("请输入索引:"))
print(li[i])
except (TypeError,IndexError,KeyError) as result:
print("您的索引好像没有那么多,请重新考虑!",result)
else:
print("您可真棒!!!")
finally:
print("我永远都在❤")
注意:
- 当在try块中抛出一个异常,立即执行finally块代码
- finally块中的所有语句执行后,异常被再次触发,并执行except块代码
六、异常的传递:当前方法中的异常,在其他方法调用该方法时可进行捕获
def fun1():
print("Welcome to my world again!")
print(num)
print("Welcome to you next time!")
def fun2():
try:
print("Welcome to my world!")
fun1()
print("i will always love you❤")
except Exception as result:
print("您的异常结果为:",result)
fun2()
七、触发异常:使用raise语句自己触发异常,可自己定义输出语句
def functionName(score):
if score<0 or score>100:
raise Exception("您的成绩不符合规则", score)
# 触发异常后,后面的代码就不会再执行
elif score>=0 and score<=60:
print("您考的可真好!")
else:
print("继续努力!")
score=int(input("请输入成绩:"))
functionName(score)
八、用户自定义异常:通过创建一个新的异常类,用户可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接或间接的方式
#自定义一个异常的类,括号里为继承的父类
class ShortInputException(Exception):
#init为初始化方法:1.类的实例化调用的方法 2.给参数赋值
def __init__(self, length, atleast):
#self.自定义变量 用来接收参数值 此时的self就代表类的实例化对象
self.len = length
self.atl = atleast
def main():
try:
s = input('请输入 --> ')
if len(s) < 3:
# raise触发一个自己定义的异常 类名():实例化对象
raise ShortInputException(len(s), 3)
except ShortInputException as result: #result就是报错信息
print('ShortInputException: 输入的长度是%d,长度至少应是%d'% (result.len, result.atl))
#此else为try的,不是if的
else:
print('没有异常发生')
main()
九、模块:Module,是一个Python文件,以.py 结尾,包含了Python对象定义和Python语句
1.使用Python自带的模块:import 模块名
2.使用自定义模块:一般创建于"包"下
①创建一个py结尾的文件,即为模块
②在模块中创建一些方法
③在其他py文件中导入模块中的方法,直接使用
④导入的语句:form 文件名 import 方法1,方法2...(或者直接写*,引用全部)
#在模块中定义方法
def test1():
print("test1")
def test2():
print("test2")
#在其他py文件中引用
#from practice_module import *
from practice_module import test1,test2
test1()
test2()
⑤扩展:使用__all__(两个下划线)。当被引入的包中有__all__=("方法名"),里面指定的方法才能被调用,调用的时候使用from 模块名 import *
#在模块中定义方法
#使用__all__
__all__=("test1","test3")
def test1():
print("test1")
def test2():
print("test2")
def test3():
print("test3")
#在其他py文件中引用,引用不到test2()
from practice_module import *
test1()
test3()
十、包
1.定义:
- 简单来说,包就是文件夹,但该文件夹下必须存在__init__.py 文件,该文件的内容可以为空。
- __init__.py 用于标识当前文件夹是一个包。
2.使用:模块一般就定义在包中
十一、Python常见模块
1.time模块:时间获取和转换
- time.ctime( )时间的字符串
- time.time( )返回当前时间的时间戳
- time.sleep( )延时多少秒
2.math模块:包含计算正弦、余弦、正切、绝对值、余数、次方等的方法
3.os模块:对操作系统的一些操作,需要先导入才能使用
- rename()可以完成对文件的重命名操作
- remove()可以完成对文件的删除操作
- mkdir()可以完成对文件的重命名操作
- getcwd()可以获取当前目录
4.random模块:作用是返回随机数,只要跟随机元素相关的,都可以使用它。
5.string模块:主要用于对字符串进行操作
6.sys模块:提供了一系列有关python运行环境的变量和函数的模块
- sys.argv函数实现从程序外部向程序传递参数
- sys.platform函数用于获取当前系统平台
7.logging模块:是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志回滚等
- 相比print具有以下优点:
- 可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必显示大量的调试信息
- print将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其他数据,logging则可以由开发者决定将信息输出到什么地方,怎么输出
8.hashlib加密模块:主要提供字符加密功能,将MD5和SHA模块整合到了一起
9.datetime模块:重新封装了time模块,提供更多接口
十二、Python常见的异常
1.NameError:尝试访问一个未声明的变量
#不定义变量name直接输出
print(name)
2.ZeroDivisionError:当除数为零的时候,即0为分母
num=6/0
print(num)
3.SyntaxError:唯一不在运行时发生的异常,它代表着Python代码中有一个不正确的结构,使得程序无法执行。这些错误一般是在编译时发生,解释器无法把脚本转换为字节代码。比如for循环不写冒号
- Python的解释器就是Python.exe,是用来解释运行你编写的Python代码的,我们下载的Python其实自带解释器和编译器
- 我们常用的编译器就是PyCharm
4.IndexError:当使用序列中不存在的索引时
li=[1,2,3,4,5]
print(li[5])
5.KeyError:当使用字典中不存在的键访问值时
dict={"name":"lyw","age":16}
print(dict["names"])
6.ValueError:传入无效的值,即使值的类型是正确的
#查询z的索引,然而z不存在
str="abcdefg"
print(str.index("z"))
7.IOError:输入/输出异常
- 引发原因:
- 主要是要打开的文件不存在
- 文件写入时出现错误,主要可能的原因是以读的方式打开了文件,忘记关闭资源,直接在读的模式中进行了写的操作
- 权限问题导致,没有对文件读和写的权限
8.FileNotFoundError:试图打开不存在的文件时。FileNotFoundError属于IOError的一种
#文件abc.txt不存在
fileRead=open("abc.txt","r")
print(fileRead.read())
fileRead.close()
9.AttributeError:当尝试访问未知的对象属性时
#Phone类不定义任何属性和方法
class Phone(object):
pass
#创建实例,给实例添加color属性
#但是没有price属性,所以报错
phone=Phone()
phone.color="远峰蓝"
print(phone.color)
print(phone.price)
10.TypeError:期待的类型与实际的类型不一致
#input的是一个字符串类型
#判断的时候则是int类型
age=input("请输入你的年纪:")
if age>=18:
print("已成年")
else:
print("未成年")
11.ImportError:无法导入模块或者对象,主要是路径有误或名称错误