Python 实现简单的自定义异常类型
来源:互联网 发布:分班软件fenban 编辑:程序博客网 时间:2024/05/16 12:09
#! /usr/bin/env pythonimport os, socket, errno, types, tempfileclass NetworkError(IOError): passclass FileError(IOError): passdef updArgs(args, newarg=None): if isinstance(args, IOError): myargs = [] myargs.extend([arg for arg in args]) else: myargs = list(args) if newarg: myargs.append(newarg) return tuple(myargs)def fileArgs(fn, mode, args): if args[0] == errno.EACCES and 'accesss' in dir(os): perms = '' permd = {'r': os.R_OK, 'w': os.W_OK, 'x': os.X_OK} pkeys = permd.keys() pkeys.sort() pkeys.reverse() for eachPerm in 'rwx': if os.access(fn, permd[eachPerm]): perms += eachPerm else: perms += '-' if isinstance(args, IOError): myargs = [] myargs.extend([arg for arg in args]) else: myargs = list(args) myargs[1] = "'%s' %s (perms: '%s')" % \ (mode, myargs[1], perms) myargs.append(args.filename) else: myargs = args return tuple(myargs)def myconnect(sock, host, port): try: sock.connect((host, port)) except socket.error, args: myargs = updArgs(args) if len(myargs) == 1: myargs = (errno.ENXIO, myargs[0]) raise NetworkError, \ updArgs(myargs, host +':' + str(port))def myopen(fn, mode='r'): try: fo = open(fn, mode) except IOError, args: raise FileError, fileArgs(fn, mode, args) return fodef testfile(): fn = tempfile.mktemp() f = open(fn, 'w') f.close() for eachTest in ((0, 'r'), (0100, 'r'), (0400, 'w'), (0500, 'w')): try: os.chmod(fn, eachTest[0]) f = myopen(fn, eachTest[1]) except FileError, args: print "%s: %s" % \ (args.__class__.__name__, args) else: print fn, "opened ok... perm ignored" f.close() os.chmod(fn, 0777) os.unlink(fn)def testnet(): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) for eachHost in ('deli', 'www'): try: myconnect(s, eachHost, 8080) except NetworkError, args: print "%s: %s" % \ (args.__class__.__name__, args)if __name__ == '__main__': testfile() testnet()
c:\docume~1\beyond~1\locals~1\temp\tmpaphqao opened ok... perm ignoredc:\docume~1\beyond~1\locals~1\temp\tmpaphqao opened ok... perm ignoredFileError: [Errno 13] Permission deniedFileError: [Errno 13] Permission deniedNetworkError: [Errno 11001] getaddrinfo failed: 'deli:8080'NetworkError: [Errno 11001] getaddrinfo failed: 'www:8080'
0 0
- Python 实现简单的自定义异常类型
- python 常见的异常类型
- 自定义异常的简单写法
- 自定义异常的简单使用
- 自定义异常,实现异常链的功能
- 自定义异常类型
- 自定义异常类型
- java自定义异常类型
- 自定义异常类型
- python 自定义异常的定义和代码
- PYTHON 自定义异常类的使用
- 判断异常类型,全面捕获Python的异常
- Python中的异常类型
- Python中的异常类型
- Python中的异常类型
- python异常类型
- Python 异常类型
- Python中的异常类型
- qcom平台分析通话失败原因
- 给新建的Cocos2d-x 3.x 的Win32工程添加CocoStudio库
- 在Maven中新增自定的jar包
- JQuery滚动图片
- 程序员的八种级别,你在哪一级?
- Python 实现简单的自定义异常类型
- Android开发:史上最简单方便的viewpager加indicator的方法
- Maven的使用
- android开发,修改默认界面的背景色
- TCP/IP协议中的三个参数的理解
- java动态代理(JDK和cglib)
- StringTokenizer使用
- Java中String类的方法及说明
- Linux内核信号处理机制介绍