python编程艺术-沈崴

python编程艺术-沈崴

ID:14085447

大小:205.17 KB

页数:61页

时间:2018-07-25

python编程艺术-沈崴_第1页
python编程艺术-沈崴_第2页
python编程艺术-沈崴_第3页
python编程艺术-沈崴_第4页
python编程艺术-沈崴_第5页
资源描述:

《python编程艺术-沈崴》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、Python编程艺术享受高效无误且充满乐趣的编程defhello():print'helloworld!'什么样的函数返回None?没有消息就是最好的消息对许多有经验的程序员来说True/1并不是执行成功的意思None是最好的沉默虽然0也不错,然而在Python中默认的返回值是None函数不能既返回结果又返回错误瘆人的设计“如果open()返回errno”try:fileobj=open('filename')#虽然open能返回错误,但不能保证所有都捕获了啊#所以还是catch下比较保险?except:raise#暂

2、且raise吧,鬼知道会是什么状况ifisinstance(fileobj,file):#正确返回file对象...正常的工作代码...elifisinstance(fileobj,int):#返回错误码,执行错误处理errno=fileobjraiseIOError(errno,os.strerror(errno))#还会有其他状况?#既然已经有多种返回类型了,指不定还会不会节外生枝#这回还真无法预期了else:raiseIOError(-1,'Unknownerror')其实C语言是一样一样的因为C没有异常机制,而

3、认为这种在Python中return一切的做法,显然是源于C语言的“优良作风”——这是一种误解,其实C处理异常结果的思路和Python是完全一样的Python的标准接口try:fobj=open('filename')exceptIOError:...文件打开失败......只要没有异常,fobj就一定是file对象...try:data=fobj.read()exceptIOError:...读取失败......只要没有异常,data就一定是str 类型...最小惊讶原则误区1函数返回值的可预见性,并不完全意味着仅返

4、回一种返回值误区2函数尽量返回一种返回值并不意味着返回同一种“类型”或基于同一种“基类”的数据一个例子,虽然返回的都是Tupleif...:returnusername,passwdelse:returnname,age,genderDuckTyping文件系统文件:open(...)与file(...)可以是任何介质,磁盘/内存文件/声卡/NFS/FUSE等字节流文件:StringIO(...)套接字文件:socket.makefile(...)管道:os.popen(...)函数族popen()、popen2()、

5、popen3()、popen4()标准输入输出:sys.stdin、sys.stdout、sys.stderr其他:gzip.open(..)等没有所谓基类(BaseFile)却行为一致将静态语言编程思想套用于动态语言是非常危险的动态语言不需要预分配内存危险的初始化也没有所谓虚表抛出NotImplementedError就安全了?避免把问题演变成逻辑错误解释器错误比运行期错误好力图把错误提早到程序跑起来之前程序崩溃比逻辑错误好力图把可能存在的逻辑错误变成崩溃尤其不要捕获AttributeError发现逻辑问题的最好机会

6、抛出AttributeError和KeyError而不是通过返回None来错失机会了解各种Python异常的含义尽量使用现有异常类型Python预设了丰富的异常类型很多情况下设计额外的异常会和现有异常类型重合发生混淆、影响系统稳定和增加维护成本OSError&IOErrorerrno在Python中的传播坏消息是IOError并不是一种OSError好消息是socket.error可以用IOError获取先TypeError而后ValueErrorint(None)/int('hello')当你开始大量raiseTyp

7、eError和 ValueError你就要注意了raise是用来补刀的AssertError合情合理的逻辑错误?使用assert的场合异常策略总结不要做输入检测不要编写保护性代码不要容错,使程序崩溃不要处理异常,尽量制造和抛出异常一个脆弱的程序?我们都知道没有完美的程序,出错在所难免,任何一个小异常都能让整个程序崩溃,对于一个已经开始运营的软件产品——这是可以接受的吗?单点复杂度让专业的程序去做专业的事SIMPLEISBETTER推论1检查只会让输入变得更不可靠推论2越多的安全策略只会让程序变得更不安全只有当错误不是错

8、误哪些异常是就地解决的?同样的写法不同的命运如何编写快速的dict检索逻辑Python异常的性能之迷快却没有想象中那么快慢却没有想象中那么慢回到Duck-Typing这个主题严重误区Duck-Typing是基于对象和对象方法的吗?如果把for...inobj替换成obj.__iter__()Duck-Typing是基于调用协议的a

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。