一、什么是异常
Python错误与异常
什么是异常
ZeroDivisionError: division by zero
NameError: name 'a1' is not defined
TypeError: can only concatenate str (not "int") to str
二、异常处理
异常处理
1-1
def exp_exception(x,y):
try:
a=x/y
print('a=',a)
return a
except Exception:
print("程序出现异常,异常信息:被除数为0")
exp_exception(2,2)
=>
a= 1.0
1-2
def exp_exception(x,y):
try:
a=x/y
print('a=',a)
return a
except Exception:
print("程序出现异常,异常信息:被除数为0")
exp_exception(2,0)
=>
程序出现异常,异常信息:被除数为0
1-1
def exp_exception(x,y):
try:
a=x/y
b=name
print('a=',a)
return a
except ZeroDivisionError:
print("除数不能为0")
except NameError:
print("没有你要找的名字")
exp_exception(2,0)
=>
除数不能为0
1-2
def exp_exception(x,y):
try:
a=x/y
b=name
print('a=',a)
return a
except ZeroDivisionError:
print("除数不能为0")
except NameError:
print("没有你要找的名字")
exp_exception(2,2)
=>
没有你要找的名字
> 使用一个块捕捉多个异常
def exp_exception(x,y):
try:
a=x/y
b=name
print('a=',a)
return a
except (ZeroDivisionError,NameError,TypeError):
print("你的输出数据有误!")
exp_exception(2,'0')
=>
你的输出数据有误!
异常处理
> 捕捉对象
def exp_exception(x,y): try: a=x/y b=name print('a=',a) return a except (ZeroDivisionError,NameError,TypeError) as e: print(e) # 输出 e,这地方不要写自己自定义的内容 exp_exception(2,'0') exp_exception(2,0) exp_exception(2,2) => unsupported operand type(s) for /: 'int' and 'str' division by zero name 'name' is not defined
> 全捕捉
def exp_exception(x,y): try: a=x/y b=name except (ZeroDivisionError,NameError,TypeError) as e: print(e) exp_exception(2,'') => unsupported operand type(s) for /: 'int' and 'str'
def exp_exception(x,y): try: a=x/y b=name except: print("Error") exp_exception(2,'') => Error
> try/except...else
def exp_exception(x,y): try: a=x/y except: print("Error") else: print("程序没有错误,执行结束") exp_exception(2,'') exp_exception(2,2) => Error
> try-finally 语句
def use_finally(x,y): try: a=x/y finally: print("不管有没有异常,都会执行我的哦~") use_finally(2,2) use_finally(2,0) => 不管有没有异常,都会执行我的哦~ 不管有没有异常,都会执行我的哦~ Traceback (most recent call last): File "d:/VSCode/Untitled-1.py", line 10, in <module> use_finally(2,0) File "d:/VSCode/Untitled-1.py", line 5, in use_finally a=x/y ZeroDivisionError: division by zero
def use_finally(x,y): try: a=x/y except ZeroDivisionError: print("除数不能为0") finally: print("不管有没有异常,都会执行我的哦~") use_finally(2,2) use_finally(2,0) => 不管有没有异常,都会执行我的哦~ 除数不能为0 不管有没有异常,都会执行我的哦~
def use_finally(x,y): try: a=x/y except ZeroDivisionError: print("除数不能为0") else: print("程序执行成功") finally: print("不管有没有异常,都会执行我的哦~") use_finally(2,2) use_finally(2,0) => 程序执行成功 不管有没有异常,都会执行我的哦~ 除数不能为0 不管有没有异常,都会执行我的哦~
三、抛出异常
抛出异常
Exception
NameError: This is NameError
try: raise NameError("这是一个NameError") except NameError: print("捕捉到NameError") # 不加 raise,输出对应字符就结束 => 捕捉到NameError
try: raise NameError("这是一个NameError") except NameError: print("捕捉到NameError") raise => 捕捉到NameError Traceback (most recent call last): File "d:/VSCode/Untitled-1.py", line 4, in <module> raise NameError("这是一个NameError") NameError: 这是一个NameError
Python重要的内建异常类