- 异常就是错误,会导致程序崩溃并停止运行
- python中能监控并捕获到异常,将异常部位的程序进行修理使得程序正常运行
- 异常语法 try: except<异常类型>:
- 捕获通用异常 except Exception as e:
- 捕获具体异常 except <具体异常类型> as e:
- 捕获多个异常 except(异常类型1,异常类型2,……) as e: 可以分开写,也可以()一次性写
def upper1(data):
try:
re = data.upper()
except:
return '程序出错了,需要输入字符串类型'
return re
result = upper1('kiiii')
print(result)
print('kiji'.upper())
result = upper1(233) # AttributeError: 'int' object has no attribute 'upper'
print(result)
def upper2(data):
try:
re = data.upper()
except Exception as e:
return '程序出错了:{}'.format(e)
return re
result = upper2(233)
print(result)
print('===========')
def test():
try:
print('22222')
1/0 # 一旦出错,后续的代码就不再执行,直接进入异常处理模块
print('是否触发')
except ZeroDivisionError as e:
print(e)
test()
# def test1():
# try:
# print('22222')
# print(name) # NameError: name 'name' is not defined
# except ZeroDivisionError as e: # 如果捕获的异常与触发的异常不对应时,程序报错
# print(e)
def test1():
try:
print('22222')
print(name) # NameError: name 'name' is not defined
except (ZeroDivisionError,NameError) as e: # 如果捕获的异常与触发的异常不对应时,程序报错
print(e)
print(type(e)) # e 不是一个字符串,是个类,dir()可以查看他有哪些方法
print(dir(e))
test1()
def ghh(data):
if data <5:
print('>5')
elif data>10:
print('>10')
elif data >15:
print('>15')
else:
print('else')
ghh(25)

常用异常类型举例:
class Test(object):
pass
t = Test()
try:
t.name
except AttributeError as e:
print(e)
d = {'name':'mark'}
try:
d['age']
except KeyError as e:
print('键值错误:',e)
l = [1,2,3]
try:
l[4]
except IndexError as e:
print(e)
name = 'mark'
try:
int(name)
except ValueError as e:
print(e)
def test(a):
return a
try:
test()
except TypeError as e:
print(e)
- 异常中的finally: 无论是否发生异常,一定会执行的代码块
- 在函数中,即便在try或者except 中进行了return,也依然会执行finally中的代码块
- try语法至少要伴随except或者finally其中一个,必须2选一
def test():
try:
1/0
except ZeroDivisionError as e:
print(e)
finally:
print('finally')
test()
def test1():
try:
2/0
except ZeroDivisionError as e:
print('1111111')
return e
finally:
print('finally')
print('========')
re = test1()
print(re)
def test2():
try:
print('try-test')
return 'try over'
except ZeroDivisionError as e:
return e
finally:
print('finally')
print('=====')
re2 = test2()
print(re2)
def test3():
try:
1/0
except ZeroDivisionError as e:
print('异常触发')
return e
finally:
return 'finally'
print('=====')
re3 = test3() # 异常正常触发了,但是在有finally的时候,最终选择了finally的return
print(re3)
def test4():
try:
print('try999')
return 'try-test4'
except ZeroDivisionError as e:
print('异常触发')
return e
finally:
print('finally-print')
return 'finally-4'
print('=====')
re4 = test4() # 在有finally的时候,最终选择了finally的return
print(re4)
def test5():
try:
print('try-5')
1/0
print('try-555')
finally:
# print('finally-5')
return 'finally-5'
# test5() # 会报错,但finally正常打印,finally中添加return,不报错
print('=====')
re5 = test5() #忽略异常,直接进入finally
print(re5)

- 自定义抛出异常 raise 异常类型(message)
- 为什么之前的内置异常中不需要添加message,因为python解释器中自动帮我们添加了
- 自定义异常类型:继承基类-Exception,在构造函数中定义错误信息
# custom 代表自定义的意思
def test(a):
if a == 10:
raise ValueError('Num 不可以是10')
else:
print('a = ',a)
test(3)
def test1(a):
try:
test(a)
except ValueError as e:
print(e)
test1(10)
class NumberError(Exception):
def __init__(self,message):
self.message = message
class NameLimitError(Exception):
def __init__(self,message):
self.message = message
def test4(name):
if name == 'mark':
raise NameLimitError('mark用户不可以被填写')
else:
print('用户为:',name)
def test5(num):
if num < 50:
raise NumberError('填入数字不能低于50')
else:
print('填入的数字为:',num)
print('===========')
try:
test5(40)
except NumberError as e:
print(e)
try:
test4('mark')
except NameLimitError as e:
print(e)

- 断言:assert 用于判断一个表达式,在表达式条件为false的时候触发异常
- assert expression,message
(参见stu-system-test3)
本文深入讲解Python中的异常处理机制,包括基本语法、常见异常类型、自定义异常及断言使用等核心内容,并通过实例演示如何有效捕捉和处理异常。

1990

被折叠的 条评论
为什么被折叠?



