1.异常处理
1.1.报错处理
File “/home/pyvip/py_case/11.py”, line 74, in
print(a)#File(文件位置),line74(第几行),(后面所报错的代码)
NameError: name ‘a’ is not defined(有个变量名为’a’的没去定义它)
SyntaxError: Missing parentheses in call to ‘print’. Did you mean print(a)?#SyntaxError(语法错误)
TypeError: unsupported operand type(s) for /: ‘str’ and ‘int’#TypeError类型错误 'str’字符串不能跟’int’整型去除
1.2.try,except
格式:
try:#首先写一个try,然后把所有可能出错的代码放到里面去。
可能出错的代码
可能出错的代码
except:#捕抓异常
pass#跳过
try:#首先写一个try,然后把所有可能出错的代码放到里面去。
print('aa')
print(a)
print('bb')
except:#捕抓异常
pass#跳过
结果:
aa
(因为捕抓到print(a)这个报错,后面写pass直接跳过不再执行后面的代码)
1.3.try,except NameError as 变量
格式:
try:#首先写一个try,然后把所有可能出错的代码放到里面去。
可能出错的代码
可能出错的代码
except NameError as 变量:#捕抓具体异常然后打印出来
print(变量)
try:#首先写一个try,然后把所有可能出错的代码放到里面去。
print('aa')
print(a)
print('bb')
except NameError as aa:#捕抓具体异常传给aa变量,最后会先把没有出错的先执行,执行到有错误的地方就捕抓出来,终止执行
print(aa)
结果:
aa
name 'a' is not defined
1.4.捕获多种异常
try:
except NameError
except TypeError
except ImportError
except NameError as 变量
finally:
格式:
try:#首先写一个try,然后把所有可能出错的代码放到里面去。
可能出错的代码
可能出错的代码
except NameError:#捕抓具体异常然后打印出来
print(‘变量未定义’)
except TypeError:
print(‘类型错误’)
except ImportError:
print(‘导入错误’)
except NameError as 变量:
print(‘未知错误类型’)
print(‘变量’)
else:#否则
print(‘上面没有异常’)
finally:#执行到有错误的地方就捕抓出来,继续执行
print(‘有没有错误都继续执行完’)
try:#首先写一个try,然后把所有可能出错的代码放到里面去。
print('a')
print('b')
except NameError:#捕抓具体异常然后打印出来
print('变量未定义')
except TypeError:
print('类型错误')
except ImportError:
print('导入错误')
except NameError as c:
print('未知错误类型')
print(c)
else:#否则
print('上面没有异常')
finally:#执行到有错误的地方就捕抓出来,继续执行
print('有没有错误都继续执行完')
结果:
a
b
上面没有异常
有没有错误都继续执行完
try:#首先写一个try,然后把所有可能出错的代码放到里面去。
print(a)
print('b')
except NameError:#捕抓具体异常然后打印出来
print('变量未定义')
except TypeError:
print('类型错误')
except ImportError:
print('导入错误')
except NameError as c:
print('未知错误类型')
print(c)
else:#否则
print('上面没有异常')
finally:#执行到有错误的地方就捕抓出来,继续执行
print('有没有错误都继续执行完')
结果:
变量未定义
有没有错误都继续执行完
注意:else在没有异常的时候会执行,finally不管是否有异常,都会执行
except用来接受异常,并且可以抛出或者返回异常
try将可能会发生异常的代码放在try中,就可以得到异常,并做相应处理
1.5.自定义异常类型
class ZidingyiError(Exception):
pass
def func(name):
if name == '342sdas':
print('没有错误')
else:
raise ZidingyiError('你这个名字有问题')#raise主动去抛出异常
try:
func('zhu')
except ZidingyiError as ee:
print(ee)
结果:
你这个名字有问题
1.6.断言语法assert
断言语句是将调试断言插入程序的一种便捷方式
assert 的语法规则是:
表达式返回 True 不报错
表达式返回 False 报错 报 AssertionError
格式:
assert 判断条件:(条件满足就继续执行,条件不满足的话,就报错)
assert 1==1
assert 1==2#报错