https://docs.python.org/3/tutorial/errors.html#handling-exceptions

https://docs.python.org/3/library/exceptions.html#ValueError

try:
int("x")
except Exception as e:
'''异常的父类,可以捕获所有的异常'''
print(e)
# e变量是Exception类型的实例,支持__str__()方法,可以直接打印。
invalid literal for int() with base 10: 'x'
try:
int("x")
except Exception as e:
'''异常的父类,可以捕获所有的异常'''
print(e.args)
# e变量有个属性是.args,它是错误信息的元组。

("invalid literal for int() with base 10: 'x'",)try: datetime(2017,2,30)except ValueError as e: print(e) day is out of range for monthtry: datetime(22017,2,30)except ValueError as e: print(e) year 22017 is out of rangetry: datetime(2017,22,30)except ValueError as e: print(e) month must be in 1..12e = Nonetry: datetime(2017,22,30)except ValueError as e: print(e) month must be in 1..12e
# e这个变量在异常过程结束后即被释放,再调用也无效
 Traceback (most recent call last): File "<input>", line 1, in <module>NameError: name 'e' is not defined

errarg = None
try:
    datetime(2017,22,30)
except ValueError as errarg:
    print(errarg)
    
month must be in 1..12
errarg
Traceback (most recent call last):
  File "<input>", line 1, in <module>
NameError: name 'errarg' is not defined
try:
    datetime(2017,22,30)
except ValueError as errarg:
    print(errarg.args)

# ValueError.args 返回元组

('month must be in 1..12',)
message = None
try:
    datetime(2017,22,30)
except ValueError as errarg:
    print(errarg.args)
    message = errarg.args
    
('month must be in 1..12',)
message
('month must be in 1..12',)
try:
    datetime(2017,22,30)
except ValueError as errarg:
    print(errarg.args)
    message = errarg
    
('month must be in 1..12',)
message
ValueError('month must be in 1..12',)
str(message)
'month must be in 1..12'

分析异常信息,并根据异常信息的提示做出相应处理:

try:
y = 2017
m = 22
d = 30
datetime(y,m,d)
except ValueError as errarg:
print(errarg.args)
message = errarg
m = re.search(u"month", str(message))
if m:
dt = datetime(y,1,d) ('month must be in 1..12',)
dt
datetime.datetime(2017, 1, 30, 0, 0)

甚至可以再except中进行递归调用:

def validatedate(y, mo, d):
dt = None
try:
dt = datetime(y, mo, d)
except ValueError as e:
print(e.args)
print(str(y)+str(mo)+str(d))
message = e
ma = re.search(u"^(year)|(month)|(day)", str(message))
ymd = ma.groups()
if ymd[0]:
dt = validatedate(datetime.now().year, mo, d)
if ymd[1]:
dt = validatedate(y, datetime.now().month, d)
if ymd[2]:
dt = validatedate(y, mo, datetime.now().day)
finally:
return dt validatedate(20199, 16, 33)
('year 20199 is out of range',)
201991633
('month must be in 1..12',)
20181633
('day is out of range for month',)
2018433
datetime.datetime(2018, 4, 20, 0, 0)

最新文章

  1. Linux下的C Socket编程 -- 简介与client端的处理
  2. C语言常用知识
  3. 使用SharedPreferences进行简单的储存
  4. js中RHS与LHS区别
  5. 20145227 《Java程序设计》第5周学习总结
  6. wust 1061 链表的合并
  7. 第2章 数字之魅——寻找最大的K个数
  8. Android平台音频信号FFT的实现
  9. 我的mysql数据库sql优化原则
  10. sodu 命令场景分析
  11. nginx配置文件作用介绍
  12. Node.js DNS 模块
  13. SimpleDateFormat用法大全及易错分析
  14. 2018年多校第三场第一题 A. Ascending Rating hdu6319
  15. JDK1.8源码(八)——java.util.HashSet 类
  16. Python基础 ----- 流程控制
  17. FPGA做正则匹配和网络安全,究竟有多大的优势?
  18. leetcode — reverse-integer
  19. BZOJ3252 攻略 贪心、长链剖分
  20. Linux下EC20实现ppp拨号(转)

热门文章

  1. python代码组织及模块使用
  2. 2013.6.26 - OpenNER第六天
  3. js HTTP 下载 处理 api 请求 返回数据流
  4. PHP openssl DES加解密
  5. MySQL批量修改相同后缀表名
  6. 布隆过滤器(Bloom Filter)-学习笔记-Java版代码(挖坑ing)
  7. java 获取某年某月最后一天
  8. js中string常用方法
  9. js获取当前时间往后加6天
  10. http和https 握手过程