异常:
BaseException 所有异常的基类
SystemExit 解释器请求退出
Exception 常规错误的基类
StopIteration 迭代器没有更多的值
GeneratorExit 生成器(generator)发生异常来通知退出
FloatingPointError 浮点计算错误
OverflowError 数值运算超出最大限制
ZeroDivisionError 除(或取模)零 (所有数据类型)
AttributeError 对象没有这个属性
EOFError 没有内建输入,到达EOF 标记
EnvironmentError 操作系统错误的基类
IOError 输入/输出操作失败
OSError 操作系统错误
WindowsError 系统调用失败
ImportError 导入模块/对象失败
异常产生的时机:系统产生
如果产生异常,程序中止:程序不健壮
给程序添加异常,使程序变得健壮
异常不是错误
try:
有异常的代码例如:1/0
except:
处理异常
except Exception:
所有异常
finally:一定会执行
不管 try 子句里面有没有发生异常,finally 子句都会执行
当try语句中有return语句的时候,会检查是否有finally语句,若有,会先执行finally语句,在执行return
Python 使用 raise 语句抛出一个指定的异常
自定义异常
class sexException(Exception):
pass#异常类可以省略属性
def dosex():
sex=input("请输入性别:")
if sex!='男' and sex!='女':
raise sexException("性别只能为男或女")#Python 使用 raise 语句抛出一个指定的异常
try:
dosex()
except sexException as se:
print(se)
日志
不同的应用程序所定义的日志等级可能会有所差别,分的详细点的会包含以下几个等级:
DEBUG 最详细的日志信息
INFO 信息详细程度仅次于DEBUG,通常只记录关键节点信息
NOTICE
WARNING 当某些不期望的事情发生时记录的信息(警告)
ERROR 由于一个更严重的问题导致某些功能不能正常运行时记录的信息
CRITICAL 当发生严重错误,导致应用程序不能继续运行时记录的信息
ALERT
EMERGENCY
日志等级是从上到下依次升高的,即:DEBUG < INFO < WARNING < ERROR < CRITICAL,而日志的信息量是依次减少的
import logging
LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"
#日志输出格式 时间 日志级别 日志信息
logging.basicConfig(filename='aaa.txt',level=logging.DEBUG,format=LOG_FORMAT)
#aaa.txt为日志保存文件名
def test():
try:
a=int(input("请输入一个被除数:"))
b=int(input("请输入一个除数:"))
print(a/b)
return
except (ValueError):#处理异常
logging.debug("只能输入数字!")
except ZeroDivisionError:
logging.info("除数不能为0")
else:
print("else...")
finally:
print("程序结束")
test()