1、例1
try:
int1=int(input('请输入一个数字: '))
print(1/int1)
except ZeroDivisionError:
print('0不能作为分母')
except ValueError:
print('您输入的不是数字')
except:
print('程序出现错误')
※意义:用户友好;继续执行
※try except 语句中,至少有一个except,也可多个
ValueError:输入非数字的异常
ZeroDivisionError:0作为分母的异常
※兜底:不指定异常类型,捕捉任何异常
except:
print('程序出现错误')
2、希望:当程序没有出现异常,执行else中语句
if else
try except else
for else.while else
else:
print('没有出现异常')
3、无论程序有没有出现异常,都会执行
finally:
print('程序结束')
4、总结:
※常见的异常
NameError:未定义的变量
IndexErro:下标越界
FileNotFoundError:找不到文件异常
※所有的异常,都是Exception的子类,或者子类的子类
Exception也有一个父类,是BaseException
5、手动抛出异常
※复现
※raise 关键字
try:
raise IOError 假装这里有异常
except IOError:
print('程序出现了IO错误')
6、将异常输出到日志中
※.log文件
※五大模块
import logging
logging.debug(1)
logging.info(2)
logging.warning(3)
logging.error(4)
logging.critical(5)
※默认只记3,4,5
※记录详细程度提高到debug
※大写
import logging
logging.basicConfig(level='DEBUG')
logging.debug(1)
logging.info(2)
logging.warning(3)
logging.error(4)
logging.critical(5) 崩溃
※日志计入文件中
import logging
logging.basicConfig(level='DEBUG',filename='E:\\python\\test\\log1.log',filemode='a+')
logging.debug(1)
logging.info(2)
logging.warning(3)
logging.error(4)
logging.critical(5)
※将异常写入文件
import logging
import traceback
logging.basicConfig(level='DEBUG',filename='E:\\python\\test\\log1.log',filemode='a+')
try:
int1=int(input('请输入一个数字: '))
print(1/int1)
except ZeroDivisionError:
logging.error(traceback.format_exc())
except ValueError:
logging.error(traceback.format_exc())
※加时间模块
import logging
import traceback
import time
logging.basicConfig(level='DEBUG',filename='E:\\python\\test\\log1.log',filemode='a+')
try:
int1=int(input('请输入一个数字: '))
print(1/int1)
except ZeroDivisionError:
logging.error(time.strftime('%y-%m-%d %H:%M:%S')+traceback.format_exc())
except ValueError:
logging.error(time.strftime('%y-%m-%d %H:%M:%S')+traceback.format_exc())