while True:
try: # 是最常见的异常处理结构。没有这个结构出现异常直接飘红字并结束运行
a = int(input("请输入一个数字:")) # 输入一个abcd
a /= 0
print("输入了的数是:", a) # 跳过不执行
if a == 88:
print("退出程序")
break # 退出循环命令
except BaseException as e:
print(e) # 输出:invalid literal for int() with base 10: 'g'
print("异常是,输入的不是一个数字")
break
print("循环输入数字程序结束") #打印完异常后照样执行
3.多层try_except
try: # 细分异常输出能更好调试错误
a = input("请输入一个被除数:")
b = input("请输入一个除数:")
c = float(a)/float(b)
except ZeroDivisionError as e:
print("异常信息:不能除以0", e)
except ValueError as e:
print("异常信息:不能将字符串转成数字",e)
except NameError as e:
print("异常信息:变量不存在",e)
except BaseException as e:
print(("异常信息:",e))
else:
print("除的结果", c)
print("程序结束")
4.finally_代码示例
try: # finally 中保证关闭文件资源
f = open("D:/odd.txt","r")
content = f.readline()
print(content)
except:
print("文件未找到")
finally:
print("run in finally,关闭资源")
try:
f.close()#释放资源。此处也可能会发生异常。若发生异常,则程序终止,不会继续往下执行
except BaseException as e:
print(e)
5.with_代码示例
with open("d:/odd.txt", "r") as f: # with 上下文管理可以自动管理资源
content = f.readline()
print(content)
print("程序结束了")
6.traceback模块_代码示例
import traceback # 使用 traceback 将异常信息写入日志文件
try:
print("step1")
a = 1/0
except:
with open("d:/odd.txt", "a") as f:
traceback.print_exc(file=f) # 异常信息打印到"d:/odd.txt"
7.自定义异常_代码示例
class AgeError(Exception): # 继承 Exception. 测试自定义异常类
def __init__(self, error_info):
Exception.__init__(self) # ??
self.error_info = error_info
def __str__(self):
return str(self.error_info)+", 年龄错误! 应该是1-200之间"
if __name__ == "__main__": #如 果为 True,则模块是作为独立文件运行,可以执行测试代码
age = int(input("输入一个年龄:"))
if age<1 or age>200:
raise AgeError(age) # ??
else:
print("正常的年龄", age)