- 一个是 if name == ‘main’ 如何正确理解
- 另一个是 Python 对异常与错误的处理策略,用 try…except,还是 if…else…
问题一:if name == ‘main’
主要源自知乎的问题、知乎的答案以及引申查找到的博客,记录下来便于以后回顾总结
# file one.py
def func():
print("func() in one.py")
print("top-level in one.py")
if __name__ == "__main__":
print("one.py is being run directly")
else:
print("one.py is being imported into another module")
# file two.py
import one
print("top-level in two.py")
one.func()
if __name__ == "__main__":
print("two.py is being run directly")
else:
print("two.py is being imported into another module")
如果你执行one.py文件
python one.py
会输出
top-level in one.py
one.py is being run directly
如果你执行two.py文件
python two.py
会输出
top-level in one.py
one.py is being imported into another module
top-level in two.py
func() in one.py
two.py is being run directly
Thus, when module one gets loaded, its name equals “one” instead of main.
通过name的值,我们可以判断出该模块是作为脚本正在执行还是被其他模块导入,而根据这个判断,我们就可以选择性地执行代码。将只有模块作为脚本执行时的代码放入到
if __name__ == '__main__':
更进一步的,最后一个链接介绍了main.py 文件的注意事项,这里暂时先不深入了解
问题二:try…except or if…else
同样来自对知乎的问题的学习
作为使用者,应该按照所使用库的习惯来决定用那种方式处理错误,如果库使用throw则try,如果库使用return则if。
而自己的模块,根据开发时间和模块的重要性的不同而选择不同模式。如,开发时间短,脚本为临时性的则try-except;如代码比较关键要求稳定,如出错c需要详细的错误提示则if-else。
TRY ….EXCEPT
try:
open ('abc.txt','r')
except IOError,msg:
print(msg)
如果没有给出错误或者异常的名称,则会处理所有的错误和异常
try:
open ('abc.txt','r')
except IOError,msg:
print(msg)
except:
print ('other error')
TRY..FINALLY
在 try 中 raise一个异常,就立刻转入 except 中执行,在except 中遇到 return 时,就强制转到 finally 中执行, 在 finally 中遇到 return 时就返回。
def test1():
try:
print('to do stuff')
raise Exception('hehe')
print('to return in try')
return 'try'
except Exception:
print('process except')
print('to return in except')
return 'except'
finally:
print('to return in finally')
return 'finally'
test1Return = test1()
print('test1Return : ' + test1Return)
结果如下
to do stuff
process except
to return in except
to return in finally'
test1Return : finally