1、概念
即使一条语句或表达式在语法上是正确的,当试图执行它时也可能会引发错误。运行期检测到的错误称为异常
num = 0
print("num = ",num1)
print("num = " +num)
print("1 / 0 = ", 1 /num)
以上3条打印语句分别执行,会依次出现对应的错误提示。
(1)命名错误(NameError)
(2)类型错误(TypeError)
(3)零除错误(ZeroDivisionError)
通过编程捕获异常并处理是可行的
while True:
try:
num = int(input("请输入一个数值:"))
print("您输入的数值是:",num)
break
except ValueError:
print("您输入的不是合法的数据,请重新输入。")
try语句按如下方式工作:
•首先,执行try子句(在try和except关键字之间的部分)。如果没有异常发生,except子句在try语句执行完毕后就被忽略了。
•如果在try子句执行过程中发生了异常,那么该子句其余的部分就会被忽略。
•如果异常匹配于except关键字后面指定的异常类型,就执行对应的except子句。然后继续执行try语句之后的代码。
•如果发生了一个异常,在except子句中没有与之匹配的分支,它就会传递到上一级try语句中。
•如果最终仍找不到对应的处理语句,它就成为一个未处理异常,终止程序运行,显示提示信息。
•一个try语句可能包含多个except子句,分别指定处理不同的异常。至多只会有一个分支被执行。
•异常处理程序只会处理对应的try子句中发生的异常,在同一个try语句中,其他子句中发生的异常则不作处理。
•一个except子句可以在括号中列出多个异常的名字,例如:
try:
with open('my_text01.txt','r',encoding='utf-8')as f:
x=int(f.read())
print(x)
print('file is doing')
except ZeroDivisionError:
print('除零异常!')
except FileNotFoundError:
print('文件找不到!')
except Exception:
print('其他错误!')
运行结果:
try:
f=open('my_text01.txt','r',encoding='utf-8')
x=int(f.read())
print(x)
print('file is doing')
except ZeroDivisionError:
print('除零异常!')
except FileNotFoundError:
print('文件找不到!')
except Exception as e:
print('其他错误!',e)
finally:
f.close()
print('file is close')
运行结果:
2、处理 函数里return一旦执行,后面语句就不执行了
def fun():
try:
return 1
except Exception as e:
print('exaeption',e)
finally:
print('here is running!')
return 2
x=fun()
print(x)
执行结果:
3.自定义一个异常,并把它打印出来
try:
raise NameError('名字起的有问题!')
except NameError as e :
print(e)
执行结果:
class MyException(Exception):
def __init__(self,value):
self.value=value
try:
raise MyException('我自己设置的异常')
except MyException as e:
print(e.value)
执行结果: