2011-01-13 27 views
5

Tôi có mã sau:Thuộc tính tên tệp OSError không khả dụng?

except(OSError) as (errno, strerror, filename): 
print "OSError [%d]: %s at %s" % (errno, strerror, filename) 

Nó chạy tuyệt vời trừ khi nó đáp ứng số OSError num. 123 (The file name, directory name, or volume label syntax is incorrect). sau đó tôi nhận được lỗi sau tại dòng mã ngoại trừ:

ValueError: need more than 2 values to unpack 

Nó được giải quyết bằng cách không sử dụng thuộc tính filename. Tuy nhiên, yêu cầu của tôi ngăn tôi không sử dụng thuộc tính này.

Có cách nào khác không?

Trả lời

24

Tôi chưa thấy loại xử lý ngoại lệ này khi bạn chuyển thuộc tính của đối tượng ngoại lệ sang mệnh đề as.

Thông thường bạn xử lý except ExceptionObject as e và xử lý các thuộc tính như thường xử lý các thuộc tính của đối tượng.

OSError chứa thuộc tính errno là mã lỗi số từ errno và thuộc tính strerror là chuỗi tương ứng và ngoại lệ liên quan đến đường dẫn hệ thống tệp (chẳng hạn như chdir() hoặc unlink()), trường hợp ngoại lệ sẽ chứa thuộc tính thứ ba, tên tệp, là tên tệp được truyền cho hàm.

import os 
try: 
    os.chdir('somenonexistingdir') 
except OSError as e: 
    print e.errno 
    print e.filename 
    print e.strerror 
+9

"Tôi chưa thấy loại xử lý ngoại lệ" = cách tốt nhất để nói rằng bạn đang làm sai. – marr75

+0

Cảm ơn. nó đã làm việc! – Alex58

Các vấn đề liên quan