Python 实现简单的自定义异常类型

2023-11-12

#! /usr/bin/env python

import os, socket, errno, types, tempfile

class NetworkError(IOError):
    pass

class FileError(IOError):
    pass

def 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 fo

def 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 ignored
c:\docume~1\beyond~1\locals~1\temp\tmpaphqao opened ok... perm ignored
FileError: [Errno 13] Permission denied
FileError: [Errno 13] Permission denied
NetworkError: [Errno 11001] getaddrinfo failed: 'deli:8080'
NetworkError: [Errno 11001] getaddrinfo failed: 'www:8080'

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 实现简单的自定义异常类型 的相关文章

随机推荐

  • COSCon'21 区块链(B)论坛介绍

    点击蓝字 关注我们 作者 编辑 Corrie 设计 朱亿钦 宋传琪 第六届中国开源年会 COSCon 21 将于 10月30 31日由开源社举办 本次年会将采取线上线下相结合的形式 北京 上海 深圳 成都 珠海 大连 无锡 福州八城联动 1
  • solidworks钣金-生成折弯图纸

    solidworks钣金案 1
  • 类加载机制

    任何一个类在使用之前 都会经历加载 连接和初始化3个步骤 随后程序中便可以访问它的静态方法和用new关键字创建的对象实例 静态变量存储在常量池中 1 加载过程 根据一个类的全限定名 加载该类的二进制字节流到JVM内部 2 连接 验证 验证是
  • 安装旧版本插件_iOS 应用降级插件,支持任意版本升降

    软件版本越来越高 功能越来越来越多 升级过后发现还是简简单单的老版本好用怎么办 对于iOS用户来说 这还真不好办 在App Store下载的应用都是当前的最新版 安装方式也不像安卓系统需要先下载安装包再安装 这样后期还能通过安装之前的安装包
  • 弱监督目标检测之一 最小熵隐变量模型

    目标检测是计算机视觉一个非常重要的子任务 目标检测需要发现并准确定位自然图片中的物体 在2012年之前 目标检测主要基于手工设计的特征以及传统分类器 2012年以后 出现了很多基于深度学习的目标检测方法 基于深度学习的目标检测主要分为两类
  • 作为计算机专业学生,说一说校招

    首先要说的是 作为计算机相关专业的一名学生 确实非常庆幸当年选择了这个专业 如今互联网大热 是因为和前十年的土木一样 世界特别是中国正处于互联网改变世界的浪潮当中 人类世界一共有三次工业革命 互联网这次就是第四次工业革命 可以想象一个新兴的
  • 日志中进行脱敏处理

    首先要写脱敏类 如下 Slf4j public class SensitiveDataConverter extends MessageConverter private static Pattern idCardPattern Patte
  • 大神之路-起始篇

    欢迎关注 全栈工程师修炼指南 公众号 点击 下方卡片 即可关注我哟 设为 星标 每天带你 基础入门 到 进阶实践 再到 放弃学习 涉及 企业运维 网络安全 应用开发 物联网 人工智能 大数据 学习知识 花开堪折直须折 莫待无花空折枝 作者主
  • 初识vue3/setup/ ref()/ computed/watch/生命周期/父传子

    创建项目先不着急学 main js变了 新加setup reactive ref computed watch 生命周期 父传子 子传父 ref 模板引用 暴露子组件属性 跨层传数据 defineOptions
  • 已解决 java lang NullPointerException Attempt to invoke vir

    分享一下我老师大神的人工智能教程 零基础 通俗易懂 http blog csdn net jiangjunshow 也欢迎大家转载本篇文章 分享知识 造福人民 实现我们中华民族伟大复兴 今天开发的时候 发现明明有这个id 而且也通过find
  • 【微信】PC端多开设置

    文章目录 背景 步骤 查找微信安装路径 编写 bat启动脚本 自定你快捷键图标 创建快捷方式 修改图标 背景 个人喜欢工作和生活分离 包括手机号和微信都是生活号和工作号两个 快速区分生活还是工作信息或电话 不会错过重要的信息 微信朋友圈信息
  • 盘点2020年科技领域预测~堪称大型翻车现场!

    2020年曾经是很多人幻想的一年 如今这一年真正已经到来 让我们回顾一下科技行业对2020年预测 是否已经实现 优步将部署飞行汽车 优步公司曾承诺3年时间推出飞行汽车 2020年该公司将会举行飞行汽车的演示 但是可以肯定的是 明年你无法使用
  • Python 打印三位所有水仙花数

    打印三位水仙花数 介绍 水仙花数是一个三位数 它的每位数字的3次幂之和等于它本身 例如 153 1 3 5 3 3 3 知识点 1 算术运算符 幂 符号 整除 符号 取余 符号 2 if 条件语句 3 for 循环 预先打印文字 print
  • Make-A-Video - Pytorch (wip) text to video

    制作视频 Pytorch wip Make A Video的实现 新的 SOTA 文本到来自 Meta AI 的视频生成器 在 Pytorch 中 它们结合了伪 3d 卷积 轴向卷积 和时间注意力 并显示出更好的时间融合 伪 3d 卷积并不
  • linux问题记录

    panic stack over 线程栈过小 syslog占用栈 导致栈溢出
  • Word doc/docx 格式文件转换为 MarkDown

    异想之旅 本人原创博客完全手敲 绝对非搬运 全网不可能有重复 本人无团队 仅为技术爱好者进行分享 所有内容不牵扯广告 本人所有文章仅在CSDN 掘金和个人博客 一定是异想之旅域名 发布 除此之外全部是盗文 今天忽然想要把自己的 资源分享文章
  • vc 识别移动硬盘 U盘,本地硬盘

    说明 有时候我们在做设备监控的时候 要识别一些链接设备 在使用函数GetDriveType的时候 U盘可以返回DRIVE REMOVABLE 而本地硬盘硬盘和移动硬盘DRIVE FIXED 因此还需要进一步来识别 识别方法为判断设备的总线类
  • 浅谈 SOLID 原则的具体使用

    单一职责原则 SRP 开放封闭原则 OCP 里氏替换原则 LSP 接口隔离原则 ISP 依赖倒置原则 DIP 小结 SOLID 是面向对象设计5大重要原则的首字母缩写 当我们设计类和模块时 遵守 SOLID 原则可以让软件更加健壮和稳定 那
  • 物理机重启后ES无法访问

    问题 机房断电 重启机器后 Elasticsearch 集群无法访问 集群状态访问如下 可以访问 9200 端口 目测 Elasticsearch 是正常的 但是查看集群状态报错 报错内容 error root cause type mas
  • Python 实现简单的自定义异常类型

    usr bin env python import os socket errno types tempfile class NetworkError IOError pass class FileError IOError pass de