【问题标题】:How to get the errno of an IOError?如何获取 IOError 的 errno?
【发布时间】:2010-11-11 04:48:24
【问题描述】:

C 有 perror 和 errno,它们打印并存储遇到的最后一个错误。这在执行文件 io 时很方便,因为我不必 fstat() 每个失败的文件作为 fopen() 的参数来向用户显示调用失败的原因。

我想知道在python中优雅地处理IOError异常时获取errno的正确方法是什么?

在 [1] 中: fp = open("/notthere") -------------------------------------------------- ------------------------- IOError Traceback(最近一次调用最后一次) /home/mugen/ in () IOError:[Errno 2] 没有这样的文件或目录:'/notthere' 在 [2] 中: fp = open("test/testfile") -------------------------------------------------- ------------------------- IOError Traceback(最近一次调用最后一次) /home/mugen/ in () IOError:[Errno 13] 权限被拒绝:'test/testfile' 在 [5] 中:尝试: ...: fp = open("没有") ...:除了 IOError: ...:打印“由于某种原因失败了...” ...: ...: 由于某种原因,这失败了......

【问题讨论】:

    标签: python exception errno ioerror


    【解决方案1】:

    异常有一个errno 属性:

    try:
        fp = open("nothere")
    except IOError as e:
        print(e.errno)
        print(e)
    

    【讨论】:

      【解决方案2】:

      您可以这样做。另请参阅 errno 模块和 os.strerror 函数以了解某些实用程序。

      import os, errno
      
      try:
          f = open('asdfasdf', 'r')
      except IOError as ioex:
          print 'errno:', ioex.errno
          print 'err code:', errno.errorcode[ioex.errno]
          print 'err message:', os.strerror(ioex.errno)
      

      有关 IOError 属性的更多信息,请参阅基类 EnvironmentError:

      【讨论】:

      • ioex.strerror 似乎等同于 os.strerror(ioex.errno) (python 2.7)
      【解决方案3】:
      try:
          fp = open("nothere")
      except IOError as err:
          print err.errno 
          print err.strerror
      

      【讨论】:

        【解决方案4】:

        也可以在同一个 'except' 子句中测试不同的异常,例如

        try:
            serial_port.open()
        except (AttributeError, SerialException) as e:
            print('cannot open serial port: {}'.format(e))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-10-24
          • 1970-01-01
          • 1970-01-01
          • 2015-03-26
          • 2021-01-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多