一、异常类型
python中异常信息中表明发生异常的原因,也提供处理异常的依据。
1、异常信息的分析
(如下图)尤其是<异常类型>需要重点关注!
2、常见异常错误类型
(1)缩进错误(IndentationError):一般以4个空格或一个tab作为缩进,若多出来空格或遗漏,程序都会出错(检查if/for/while等下的结构体是否正确缩进)。
(2)语法错误(SyntaxError)
- 无效语法(SyntaxError:invalid syntax):标点符号遗漏(检查for/if/while末尾是否添加冒号)/中英文符号混用/变量名使用了关键字/是否将运算符==写成了赋值符号=
- 标识符中有无效字符(SynataxError:invalid character in identifier)
- 字符串不完整(SyntaxError:EQL while scanning string literal):检查字符串两边引号是否统一/括号是否成对出现/引号嵌套是否错误(建议外层''内层"")/字符串的末尾是否将\n写成了/n
- 参数定义顺序错误(SyntaxError:non-default argument folllows default argument):默认值参数是否放置在所有参数的最后。
(3)变量名错误(NameError):变量名命名规则是只可包含字母/数字/下划线/数字不可用于开头等(检查代码中变量是否赋值/变量名前后是否统一)
(4)索引错误(IndexError):检查索引值是否超出字符串长度/列表为空[],无法获取索引值
(5)类型错误(TypeError):对象用来表示值的类型发生错误(比较抽象,看一下错误例子好理解!)
age=18
print("我的年龄是"+age) #报错:提示必须是一个字符串,不可以是数字
输出结果::
TypeError:can only concatenate str(not"int")to str
#修改后
age=18
print("我的年龄是"+"age")
#或者是
age=18
print("我的年龄是"+str(age))
(6)属性错误(AttributeError):尝试访问未知对象时出现错误/如赋值失败(可将元组换成列表试试)
a=('1','3','5')
a.append('7')
print(a)
输出结果:
AttributeError: 'tuple' object has no attribute 'append'
#元组对象没有"append"的属性(元组不可变)
#修改后
a=('1','3','5')
a=list(a)
a.append('7')
print(a)
输出结果为:
['1', '3', '5', '7']
二、程序的异常处理
1、try-except语句
语法:try:
<语句块1>
except <异常类型>:
<语句块2>
try:
a=eval(input("请输入一个整数:"))
except NameError:
print("输入错误!")
输出结果:
请输入一个整数:A
输入错误!
2、异常的高级用法
语法:try:
<语句块1>
except <异常类型1>:
<语句块2>
else: #对try语句正常执行后的追加处理
<语句块3>
finally: #无论是否异常,在执行的最后一句一定会输出<语句块4>
<语句块4>
try:
a=eval(input("请输入一个整数:"))
print(a)
except NameError:
print("输入错误!")
else:
print("正常执行!")
finally:
print("程序执行完毕")
输出结果:
请输入一个整数:4
4
正常执行!
程序执行完毕
请输入一个整数:aaaa
输入错误!
程序执行完毕
3、try-except的适用性
try-except语句会影响代码的可读性,增加代码维护难度,所以在面向商业应用的软件产品时,并不会过多使用try-except语句