如何获取 IOError 的 errno?
Posted
技术标签:
【中文标题】如何获取 IOError 的 errno?【英文标题】:How to get the errno of an IOError? 【发布时间】: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: ...:打印“由于某种原因失败了...” ...: ...: 由于某种原因,这失败了......【问题讨论】:
【参考方案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)
http://docs.python.org/library/errno.html
http://docs.python.org/library/os.html
有关 IOError 属性的更多信息,请参阅基类 EnvironmentError:
http://docs.python.org/library/exceptions.html?highlight=ioerror#exceptions.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))
【讨论】:
以上是关于如何获取 IOError 的 errno?的主要内容,如果未能解决你的问题,请参考以下文章
如何解决打开文件时出现IOError[errno 17]文件?
IOError:[Errno 套接字错误] 使用 BeautifulSoup
如何修复以下 Django 错误:“类型:IOError”“值:[Errno 13] 权限被拒绝”