python的异常
1.1 定义
◇ 异常就是错误
◇ 异常会导致程序崩溃并停止运行
◇ 能监控并捕获到异常,将异常部位的程序进行修理使程序继续正常运行
1.2 异常的语法
1.3 捕获通用异常
无法确定是那种异常情况下使用
1.4 捕获具体异常
(性能好)确定是哪种异常的情况下使用的捕获方法
其中如果try发现错误后,则会执行异常后面的程序,如果未发现错误,则会顺序执行下去
1.5 捕获多个异常
当except代码后面的异常类型使用元祖包裹起来,捕获哪种异常就抛哪种。
def upper(str_data):
new_str = 'None'
try:
new_str = str_data.upper()
except Exception as e:
print('program goes wrong !',format(e))
return new_str
# result = upper('devil')
result = upper(1)
print('result:',result)
def test():
try:
1/0
print('hello')
except ZeroDivisionError as e:
print(e)
test()
def test1():
name = 'none'
try:
1/0
name = 'one'
print(name)
except ZeroDivisionError as e:
print(e)
test1()
1.6 常用的异常合集
class Test(object):
pass
t = Test()
try:
t.name
except AttributeError as e:
print(e)
d = { 'name': '小慕'}
try:
d['age']
except KeyError as e:
print('没有对应的键:', e)
l = [1, 2, 3]
try:
l[5]
except IndexError as e:
print(e)
name = 'apple'
try:
int(name)
except ValueError as e:
print(e)
def test(a):
return a
try:
test()
except Exception as e:
print(e)
1.7 异常中的finally
-
finally,无论是否发生异常,一定会执行的代码块
-
在函数中,即便在try或except中进行了return也依然会执行finally语法块
-
try语法块,至少要伴随except或finally中的一个
finally在2.5版本之前,finally需要独立使用,不可以和try配合,之后才演变成现在的模式。
def test1():
try:
1/0
except Exception as e:
print(e)
finally:
return 'finally'
result = test1()
print(result)
def test2():
try:
1/0
except Exception as e:
return e
finally:
print('finally')
print('--------')
result = test2()
print(result)
def test3():
try:
return 'try'
except Exception as e:
print('e')
finally:
print('finally test3')
print('========')
result = test3()
print(result)
1.8 自定义异常与抛出异常
1.8.1 raise
将信息以报错的形式抛出
def test(number):
if number == 100:
raise ValueError('number 不可以是100')
return number
result = test(50)
print(result)
# result = test(100)
# print(result)
def test2(number):
try:
return test(number)
except ValueError as e:
return e
result = test2(100)
print(result)
def test3():
raise 'wrong'
# test3()
def test4(name):
if name == 'apple':
raise Exception('apple不可以被填写')
return name
test4('apple')
1.8.2 自定义异常类
- 继承基类----Exception
- 在构造函数中定义错误信息
def test(number):
if number == 100:
raise ValueError('number 不可以是100')
return number
result = test(50)
print(result)
# result = test(100)
# print(result)
def test2(number):
try:
return test(number)
except ValueError as e:
return e
result = test2(100)
print(result)
def test3():
raise 'wrong'
# test3()
def test4(name):
if name == 'apple':
raise Exception('apple不可以被填写')
return name
# test4('apple')
class NumberLimitError(Exception):
def __init__(self, message):
self.message = message
class NameLimitError(Exception):
def __init__(self, message):
self.message = message
def test5(name):
if name == 'apple':
raise NameLimitError('apple 不可以被填写')
return name
def test6(number):
if(number >= 100):
raise NumberLimitError('数字不可以大于100')
return number
print('---------')
try:
test5('apple')
except NameLimitError as e:
print(e)
try:
test6(100)
except NumberLimitError as e:
print(e)
test5('apple')
1.9 断言
1.9.1 断言的功能
assert 用于判断一个表达式,在表达式条件为false的时候触发异常
用法
1.10 debug
imitError as e:
print(e)
test5(‘apple’)
## 1.9 断言
### 1.9.1 断言的功能
assert 用于判断一个表达式,在表达式条件为false的时候触发异常
用法
[[外链图片转存中...(img-xwe5Bxo4-1660882066221)]](https://imgse.com/i/vr62B6)
[[外链图片转存中...(img-TuwxGD1w-1660882066224)]](https://imgse.com/i/vr6RHK)
## 1.10 debug
打断点