如何获取IOError的errno?
C语言有两个很方便的工具:perror和errno。它们可以用来打印和存储最近遇到的错误。当我们在处理文件时,这特别有用,因为如果打开文件失败,我就不需要每次都去检查文件的状态,只需告诉用户为什么打开文件失败就可以了。
我在想,在Python中,优雅地处理IO错误时,应该如何正确获取errno呢?
In [1]: fp = open("/notthere") --------------------------------------------------------------------------- IOError Traceback (most recent call last) /home/mugen/ in () IOError: [Errno 2] No such file or directory: '/notthere' In [2]: fp = open("test/testfile") --------------------------------------------------------------------------- IOError Traceback (most recent call last) /home/mugen/ in () IOError: [Errno 13] Permission denied: 'test/testfile' In [5]: try: ...: fp = open("nothere") ...: except IOError: ...: print "This failed for some reason..." ...: ...: This failed for some reason...
4 个回答
21
在编程中,有时候我们需要让程序在特定的条件下执行某些操作。比如说,我们可能希望在用户点击按钮时,程序才开始运行某段代码。这种情况就需要用到“事件监听器”。
事件监听器就像是一个守卫,它会一直关注某个特定的事件,比如鼠标点击、键盘按下等。当这个事件发生时,守卫就会立刻通知程序去执行相应的代码。
举个例子,如果你在网页上有一个“提交”按钮,你可以设置一个事件监听器,当用户点击这个按钮时,程序就会执行提交表单的操作。这样,程序就不会在用户没有点击按钮之前就开始执行,而是等到用户真的想要提交的时候才行动。
总之,事件监听器帮助我们控制程序的运行时机,让程序在合适的时刻做合适的事情。
try:
fp = open("nothere")
except IOError as err:
print err.errno
print err.strerror
31
这里有一些方法可以做到这一点。另外,你可以查看一下 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:
41
这个异常有一个叫做 errno
的属性:
try:
fp = open("nothere")
except IOError as e:
print(e.errno)
print(e)