- 异常
- 错误类型
1.1语法错误(Syntaxerrors)
代码编译时的错误,不符合Python语言规则的代码会停止编译并返回错误信息
1.缺少起始符号或结尾符号(括号、引号等)
![](https://i-blog.csdnimg.cn/blog_migrate/6c165701fff7f5bfd29dbcd113fb9413.png)
2.缩进错误
![](https://i-blog.csdnimg.cn/blog_migrate/34599178ee9e7c44ff549e63d8ec3bbb.png)
3.关键词拼写错误
![](https://i-blog.csdnimg.cn/blog_migrate/0273cfb068191f25a639293998c61fa2.png)
1n = 10
![](https://i-blog.csdnimg.cn/blog_migrate/2517b9421acdfce63c5631e5ad73f99b.png)
2. 异常(Exceptions)
相较于语法错误,异常比较难发现,因为它只在代码运行时才会发生,如类型错 误、数值错误、索引错误和属性错误等。
#语法错误包含在异常基类中
#异常通常由以下问题引起
•在定义函数之前就引用该函数
•调用不属于某个对象的方法或者属性
•试图将某个值转换为不恰当的数据类型
六种典型的异常
除零错误(ZeroDivisionError):除数为0
num = 10
print(num/0)
![](https://i-blog.csdnimg.cn/blog_migrate/babbf6bcce6b00005f39474e6d398625.png)
名称错误(NameError):变量使用前未进行申明或者初始化
类型错误(TypeError):某些函数或者方法只适用于特定的数据类型,如果对数据类型的操作不当,就会产生类型错误
a = "你好"
b = int(a)
![](https://i-blog.csdnimg.cn/blog_migrate/dcf98dd36ec21b0452667c77de142a63.png)
数值错误(ValueError):在输入类型正确的情况下,具体输入值错误
![](https://i-blog.csdnimg.cn/blog_migrate/772af274cbb2309dcd2d170fec074f91.png)
索引错误(IndexError):超出序列长度的索引操作
list1 = [1, 2, 3, 4, 5, 6]
print(list1[10])
![](https://i-blog.csdnimg.cn/blog_migrate/6a0349d7bcad8f4a4609f184cc126a29.png)
属性错误(AttributeError):方法或者属性不适用该对象
![](https://i-blog.csdnimg.cn/blog_migrate/b3dc148ab3dfb173e4345e44768826cf.png)
#总结
![](https://i-blog.csdnimg.cn/blog_migrate/a2c2a829dda75ff4b4df802ce0ad9d91.png)
#捕获异常
代码编写环境自带的高亮显示
•便于发现常规语法错误
•但难于发现异常
#程序要遇到异常的时候,往往是直接中断,跳出执行。但是有些时候,我们需要在遇到异常的时候另外处理,而不是直接停止。
#解决方法:
1.try...except...语句
'''
try:
将来可能会出错的代码
except:
try中的代码出错后要做出的处理方案
'''
list1 = [1, 2, 3, 4, 5, 6]
try:
print(list1[2])
except: # 只会在try中程序出错的情况下执行
print("取了不该取的索引值")
print("数加科技")
![](https://i-blog.csdnimg.cn/blog_migrate/e74df0f1b515b884abe6a21d9f888288.png)
2.try...except...else语句
list1 = [1, 2, 3, 4, 5, 6]
try:
print(list1[10])
except: # 只会在try中程序出错的情况下执行
print("取了不该取的索引值")
else: # 只有当try中的代码没有报错的时候执行(可写可不写,根据需求来决定)
print("程序没有报错")
print("数加科技")
![](https://i-blog.csdnimg.cn/blog_migrate/6076e925d830a21d61ae1de1aef247e2.png)
3.finally语句
list1 = [1, 2, 3, 4, 5, 6]
try:
print(list1[2])
except:
print("取了不该取的索引值")
finally: # 无论try中的代码是否报错都会正常执行(可加可不加,根据需求来)
print("你好")
![](https://i-blog.csdnimg.cn/blog_migrate/fb9f34a36721e110e099d88d40ca5706.png)
# 当我们明确知道程序即将报错的时候,可以使用raise关键词将错误抛出
a = int(input("请输入第一个数:"))
b = int(input("请输入第二个数:"))
if b == 0:
raise ZeroDivisionError("输入除数b为0")
else:
print(a / b)
print("数加科技")
![](https://i-blog.csdnimg.cn/blog_migrate/9cd6b352f7f23e849ac2f0733394c5f7.png)
2.re模块正则表达式(基础知识讲解)
1.匹配单个字符
![](https://i-blog.csdnimg.cn/blog_migrate/50a8beac7b234d38bc148c2028622226.png)
# 写一个正则表达式
# 写一个要去被正则表达式处理的字符串
import re
pattern = "你好"
str1 = "今天天气真好,你好!!"
print(re.search(pattern, str1))
![](https://i-blog.csdnimg.cn/blog_migrate/8056e166fb071514a9888e09645fb3a0.png)
1.1匹配单个数字:\d
import re
print(re.match(r"lebron\d","lebron23").group()) ## .group()将匹配到的内容取出来
![](https://i-blog.csdnimg.cn/blog_migrate/2ee1fcd64324f8e406ba45fb14fc7876.png)
#\d只能匹配一位数字:
1.2限制单个字符范围: []
#1到5:[12345], [1-5]
import re
print(re.match(r"lebron[1-5]","lebron23").group())
print(re.match(r"lebron[12345]","lebron23").group())
![](https://i-blog.csdnimg.cn/blog_migrate/5726d21319ec53418196aaa3f27aca7a.png)
#1-3或6-8:[123678], [1-36-8]
#1-3或a-c:[123abc], [1-3a-c]
1.3匹配单字符:\w
import re
print(re.match(r"lebron\w", "lebron23").group())
1.4匹配任意一个字符: .
import re
print(re.match(r"lebron.", "lebron23").group())
2.匹配多个字符
![](https://i-blog.csdnimg.cn/blog_migrate/3399a2325e5f32caf599cec9405f82b2.png)
import re
print(re.match(r"数加科技.*", "数加科技")) # .* 表示任意一个字符会出现0次或者0次以上
print(re.match(r"数加科技.+", "数加科技e")) # .+ 表示任意一个字符会出现1次或者1次以上
print(re.match(r"数加科技.?", "数加科技")) # .? 表示任意一个字符会出现0次或者1次
print(re.match(r"数加科技.{3}", "数加科技qwer")) # {出现的次数} 限定要出现的次数
print(re.match(r"数加科技.{3,6}", "数加科技qwerty")) # {m,n} 表示匹配m-n次数
![](https://i-blog.csdnimg.cn/blog_migrate/9ab6dfe90c6583d8ce18078b7c278806.png)
3.匹配开头或结尾