错误的处理语法:
try ... except ... finally ...
把可能会出错的代码放到try语句里面,执行出错,执行except语句块。如果有finally语句块,则执行finally语句块。执行没有错,不执行except语句块,但是一定会执行finally语句块。
可以有多个不同的except语句块。
实例:
1
2
3
4
5
6
7
8
9
10
11
|
try :
print ( 'try...' )
r = 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...' )
r = 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):
n = int (s)
if n = = 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):
n = 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)
s = '0'
n = int (s)
logging.info( 'n=%d' % n)
print ( 10 / n)
|
本文转自ting2junshui51CTO博客,原文链接:http://blog.51cto.com/ting2junshui/1751835 ,如需转载请自行联系原作者
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。