1. i+=1不等于++i
python解释器会将++i
解释为+(+i)
,同理将--i
解释为-(-i)
。其中+表示正数符号而不是自增,-表示负数符号而不是自减。这样有:
>>>-2
-2
>>>--2
2
>>>-----2
-2
因此你需要明白++i在python中语法上时合法的,但并不是我们理解的通常意义上的自增操作
2. 使用with自动关闭资源
你在IDE中这样写:
f = open("test.txt",'w')
f.write("test")
时,真的创建了文件,并且把”test”写进了文件里,这是IDE替你做的,事实上,如果你在ipyhton中这样写,打开文件后,里面并没有test.因为你没有关闭文件。
因此,你可以用下面的语法来“优雅”的操作文件:
with open('test.txt','w') as f:
f.write('test')
3. 异常处理的基本原则
1. 注意异常粒度,不推荐在try中放入过多代码。
2. 谨慎使用单独的except语句处理所有异常
3. 注意异常的捕获顺序:将继承结构中子类异常在前面的except语句中抛出,而父类异常在后面的except语句中抛出。
4. 异常应该在适当的位置处理:如果异常能够在被捕获的位置处理,那么应该及时处理,不能处理的,应该以合适的方式向上层抛出。如
try:
some_code()
except:
revert_stuff()
raise
做个试验验证一下:
1:如果这样写,则在fun()中,异常就已经被处理了:
#!/usr/bin/env python
# encoding: utf-8
"""
@python version: python3.6.1
@author: XiangguoSun
@contact: sunxiangguodut@qq.com
@site: http://blog.csdn.net/github_36326955
@software: PyCharm
@file: pyexceptions.py
@time: 5/2/2017 9:24 PM
"""
def fun():
try:
a=0
b=1
print(b/a)
except:
print("exception has been handled in fun")
#raise
def usefun():
try:
fun()
except BaseException as b:
print("exception in fun has been handled in usefun:",b)
if __name__ == '__main__':
usefun()
得到的结果证明确实是在fun中处理了:
output:
exception has been handled in fun
Process finished with exit code 0
如若把上面的代码中,注释掉的”raise”使用,把”raise”上面的print语句注释掉,则异常被raise抛出到上一层,在usefun中处理:
output:
exception in fun has been handled in usefun: division by zero
Process finished with exit code 0