爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 11208|回复: 3

[混合编程] [已收纳]python之异常处理

[复制链接]

新浪微博达人勋

发表于 2019-8-17 12:58:53 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 15195775117 于 2021-1-27 11:31 编辑

第一篇:常见异常
1、NameError
2、IndexError
3、IndentaionError  缩进错误
4、ValueError
5、KeyError  字典错误
6、IOError  
7、ImportError
8、AttributeError
9、TypeError
10、MemoryError  内存不足
11、ZeroDivisionError  除数为0
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-8-17 15:18:12 | 显示全部楼层
第二篇:异常捕获语句---try...except

------------------------------------------------
释义:
try后的语句是需要测试错误的语句,一旦发现错误,就会执行except后的语句
之后,程序会继续执行
try中的语句发生错误后,会直接跳到except语句,try的其余语句不再执行
可以设置多个except捕获多种错误
------------------------------------------------
我的疑惑:异常总是出乎意料的,能未卜先知的bug早被修好了
------------------------------------------------
案例:

def f(x,y):
    return x/y
try:
    a=6
    b=3
    print(f(a,b))
    import one_wrong_package
#as将错误名指代为error1、error2
except ZeroDivisionError as error1:
    print('错误:除数为0!\n',error1)
except ImportError as error2:
    print('导入包错误!\n',error2)
print('已执行后续语句!')

结果:
2.0
导入包错误!
No module named 'one_wrong_package'
已执行后续语句!

------------------------------------------------
多个except也可以用括号括起来:
def f(x,y):
    return x/y
try:
    a=6
    b=3
    print(f(a,b))
    import one_wrong_package
#as将错误名指代为error1
except (ZeroDivisionError,ImportError) as error:
    print('错误:除数为0或导入包出错!\n',error)
print('已执行后续语句!')

------------------------------------------------
也可以不指定异常名称,即except后直接是冒号,这样会捕获全部异常
def f(x,y):
    return x/y
try:
    a=6
    b=3
    print(f(a,b))
    a=6
    b=0
    print(f(a,b))
#as将错误名指代为error1
except:
    print('错误:除数为0!')

结果:
2.0
错误:除数为0!


密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-8-17 15:30:04 | 显示全部楼层
第三篇:异常捕获的完整语句
try:
    ......
except (ZeroDivisionError,ImportError) as error1:
    print('出现了错误:',error1,'执行A')
except (ValueError) as error2:
    print('出现了错误:',error2,'执行B')
else:
    print('没出错,我们执行...')
finally:
    print('释放文件')


密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-8-17 16:07:43 | 显示全部楼层
第四篇:抛出异常raise
该命令的用法十分灵活
异常名跟后面的括号内容均可不用
y=0
if(y == 0):
    raise ZeroDivisionError('抛出异常!')

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表