try……except
有间断的
try:
a=input("输入一个被除数:")
b=input("输入一个除数:")
c=float(a)/float(b)
except baseException as e:
print(e) #发生错误时候,输出是 float division by zero
print(c)
一直循环的,前面加个死循环语句就可以。
while True:
try:
a=input("输入一个被除数:")
b=input("输入一个除数:")
c=float(a)/float(b)
except baseException as e:
print(e) #发生错误时候,输出是 float division by zero
print(c)
try……except……else
while True:
try:
a=input("输入一个被除数:")
b=input("输入一个除数:")
c=float(a)/float(b)
except baseException as e:
print(e) #发生错误时候,输出是 float division by zero
else:
d=float(a)+float(b)
print("换一种计算法:",d)
print(c)
try……except……finally
while True:
try:
a=input("输入一个被除数:")
b=input("输入一个除数:")
c=float(a)/float(b)
except baseException as e:
print(e) #发生错误时候,输出是 float division by zero
else:
print(c)
finally:
print("我是最后的语句,不管什么情况我都执行")
#成功时候的语句
#输入一个被除数:2
#输入一个除数:3
#0.6666666666666666
#我是最后的语句,不管什么情况我都执行
#失败时候的语句
#输入一个被除数:2
#输入一个除数:0
#float division by zero
#我是最后的语句,不管什么情况我都执行
用finally结束程序的执行,不管程序是不是异常,最后都选择关闭文件
try:
f = open("C:/Users/姚/Desktop/ceshi.txt","r") #txt,文件属性不要落下
content=f.readline()
print(content) #输出内容
except:
print("没有这个文件") #如果没找到文件,就会发生异常,就执行这条语句
finally:
f.close() #关闭这个文件
可以用traceback溯源,找到问题,并且把问题打印在一个记事本中
import traceback
try:
print("第一步")
a=1/0 #这里就会报错
except:
with open("C:/Users/姚/Desktop/ceshi.txt","a") as f:
traceback.print_exc(file=f) #将出现的错误写进文档里
补充,if name == “main”
这是固定写法,前期学习的时候,代码量比较少,不需要这个也能正常输出结果。但是不严谨,如果后期代码量多了,需要有个main来进行协调,就是用这个。
#补充if __name__ == "__main__"
print("第一步")
def say_1():
str="hello_1"
print(str)
print(__name__+"这是say_1里的__name__")
if __name__ == "__main__":
print("这是if之后的第一步")
say_1()
print(__name__+"这是if之后的__name__意思")
#输出结果
# 第一步
# 这是if之后的第一步
# hello_1
# __main__这是say_1里的__name__
# __main__这是if之后的__name__意思
print("第一步")
def say_1():
str="hello_1"
print(str)
print(__name__+"这是say_1里的__name__")
##########把上面定义为hello文件##########
if __name__ == "__main__":
print("这是if之后的第一步")
hello.say_1()
print(__name__+"这是if之后的__name__意思")
#输出结果
# 第一步
# 这是if之后的第一步
# hello_1
# hello这是say_1里的__name__
# __main__这是if之后的__name__意思
自定义异常,将异常问题用自己的方式进行定义,更加直观
插入raise的用法,当程序出现错误,python会自动引发异常,也可以通过raise显示地引发异常。一旦执行了raise语句,raise后面的语句将不能执行。
raise()
用raise语句来引发一个异常。异常/错误对象必须有一个名字,且它们应是Error或Exception类的子类。
抛出异常和自定义异常,Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常。如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行。
class AgeError(Exception): #这里定义了一个错误叫年龄错误,继承Exception这个错误的大类
def __init__(self,errorInfo): #构造函数
Exception.__init__(self) #调用父类构造器
self.errorInfo = errorInfo
def __str__(self):
return str(self.errorInfo)+",年龄错误!应该在 1-150 之间" #通过重写,表达的更加直观
############测试代码################
if __name__ == "__main__": #如果为 True,则模块是作为独立文件运行, 可以执行测试代码
age = int(input("输入一个年龄:"))
if age<1 or age>150:
raise AgeError(age) #利用raise来抛出AgeError和年龄数据
else:
print("正常的年龄:",age)
#当输入值为200,会报错,然后就
# raise AgeError(age)
# __main__.AgeError: 200,年龄错误!应该在 1-150 之间



