python中的错误处理-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

python中的错误处理

简介:

错误的处理语法:

try ... except ... finally ...

把可能会出错的代码放到try语句里面,执行出错,执行except语句块。如果有finally语句块,则执行finally语句块。执行没有错,不执行except语句块,但是一定会执行finally语句块。

可以有多个不同的except语句块。

实例:

1
2
3
4
5
6
7
8
9
10
11
try:
    print('try...')
    = 10/int('a')
    print('result:', r)
except ValueError as e:
    print('ValueError: ', e)
except ZeroDivisionError as e:
    print('ZeroDivisionError: ', e)
finally:
    print('finally...')
print('END')

如果没有错误发生,可以在except后面加一个else,自动执行else。

1
2
3
4
5
6
7
8
9
10
11
12
13
try:
    print('try...')
    = 10/int('a')
    print('result:', r)
except ValueError as e:
    print('ValueError: ', e)
except ZeroDivisionError as e:
    print('ZeroDivisionError: ', e)
else:
    print('no error!')
finally:
    print('finally...')
print('END')

python所有的错误都继承于BaseException,捕获错误可以跨越多层调用。


抛出错误

要抛出错误,首先需要定义一个错误的class,选择好继承关系,然后使用raise语句抛出一个错误的实例。

1
2
3
4
5
6
7
8
9
10
11
12
class FooError(ValueError):
    pass
 
     
def foo(s):
    = int(s)
    if == 0:
        raise FooError('invalid value: %s' % s)
    return 10 / n
     
        
foo('0')


python debug的方法:

直接print(),简单粗暴。

断言assert

用print的地方都可以用assert来替代。

示例:

1
2
3
4
5
6
7
def foo(s):
    = int(s)
    assert n != 0'n is zero!'
    return  10/n
 
def main():
    foo('0')

断言失败,assert会抛出AssertionError:

logging

把assert换成logging,logging不会抛出错误,可以输出到文件。

1
2
3
4
5
6
7
import logging
logging.basicConfig(level=logging.INFO) # level的级别有debug,info, warning, error
 
= '0'
= int(s)
logging.info('n=%d' % n)
print(10/n)












本文转自ting2junshui51CTO博客,原文链接:http://blog.51cto.com/ting2junshui/1751835 ,如需转载请自行联系原作者



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章