2009-07-15 59 views
16

C có lỗi và sai số, in và lưu lỗi cuối cùng gặp phải. Điều này thuận tiện khi thực hiện tệp io vì tôi không phải fstat() mọi tệp không thành đối số cho fopen() để trình bày người dùng với lý do tại sao cuộc gọi không thành công.Xử lý ngoại lệ Python

Tôi đã tự hỏi cách thích hợp để lấy errno khi xử lý duyên dáng ngoại lệ IOError trong python là gì?

 
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... 

Trả lời

26

Các ngoại lệ có một thuộc tính errno:

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

Đây là cách bạn có thể làm điều đó. Ngoài ra, hãy xem chức năng errnoos.strerror đối với một số tiện ích.

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) 

Để biết thêm thông tin về IOError thuộc tính, xem EnvironmentError lớp cơ sở:

+1

tốt hơn câu trả lời được chấp nhận! – RichVel

+0

'ioex.strerror' có vẻ tương đương với 'os.strerror (ioex.errno)' (trăn 2.7) – Dannid

20
try: 
    fp = open("nothere") 
except IOError as err: 
    print err.errno 
    print err.strerror 
+9

Đây là cú pháp ưa thích ngay bây giờ, chỉ là một FYI cho những người xem câu hỏi này ngày nay ... – 2rs2ts

+1

hoạt động trong python3 nếu bạn sử dụng niềng răng trên bản in – 2114L3