2012-01-23 27 views
17

Tôi đang cố triển khai phương thức trả về lỗi bất cứ khi nào một thư mục nhất định không tồn tại. Tuy nhiên, thay vì làm raise OSError("Directory does not exist."), tôi muốn sử dụng thông báo lỗi tích hợp từ OSError: OSError: [Errno 2] No such file or directory:. Điều này là do tôi đang tăng ngoại lệ trong phần đầu của cuộc gọi phương thức, chứ không phải sau này (mà sẽ gọi cùng một thông điệp từ python, mà không cần bất kỳ cần thiết raise).Tăng ngoại lệ nội tuyến có thông báo mặc định trong python

Mọi con trỏ? (Trừ bằng tay làm OSError("[Errno 2] No such file or directory: "))

+2

Kích hoạt các ngoại lệ và để cho nó tuyên truyền? – delnan

+0

Tại sao bạn không muốn tự nâng cao ngoại lệ khi bắt đầu cuộc gọi phương thức, ví dụ: với 'nâng cao OSError (...)'? Đó là một cách hoàn toàn hợp lệ để nói với người gọi của bạn rằng có một vấn đề. –

+0

Chính xác những gì tôi đang cố gắng ~ Tôi chỉ đang tìm cách truy cập vào các thông báo lỗi tích hợp. – bow

Trả lời

22
import os 

try: 
    open('foo') 
except IOError as err: 
    print(err) 
    print(err.args) 
    print(err.filename)  

sản xuất

[Errno 2] No such file or directory: 'foo' 
(2, 'No such file or directory') 
foo 

Vì vậy, để tạo ra một OSError với việc sử dụng thông điệp tương tự

raise OSError(2, 'No such file or directory', 'foo') 
+2

+1 không biết điều đó! – juliomalegria

+3

Sử dụng tên lỗi từ mô-đun 'errno' và' os.strerror' để dịch chúng thành một chuỗi thông báo được bản địa hóa là thích hợp hơn với các giá trị được mã hóa cứng: 'OSError (errno.ENOENT, os.strerror (errno.ENOENT), filename) ' – user3426575

+0

Sử dụng ** e.errno, e.filename và e.strerror ** để nhận thông tin về ngoại lệ. Lưu ý có vẻ như đây là tất cả Không (bao gồm cả errno) trừ khi ít nhất hai arg được chỉ định cho ngoại lệ, với tên tệp là đối số thứ ba. –

-1
try: 
    # ... 
except OSError: 
    raise OSError("your answer") 
+0

xin lỗi vì quan điểm như vậy, tôi đăng câu trả lời từ Android và nó không có chỉnh sửa mã bình thường – pod2metra

9

Để nhận được thông báo lỗi cho một mã lỗi đã cho, bạn có thể muốn sử dụng os.strerror:

>>> os.strerror(2) 
'No such file or directory' 

Ngoài ra, bạn có thể muốn sử dụng errno module để sử dụng các từ viết tắt tiêu chuẩn cho những lỗi:

>>> errno.ENOENT 
2 
>>> os.strerror(errno.ENOENT) 
'No such file or directory' 
+0

Ồ, tôi không biết điều này. Điều này sẽ hữu ích :). Cảm ơn! – bow

1

Tôi nghĩ rằng vấn đề thực sự ở đây là bạn có lẽ làm một loạt các kiểm tra trước thay vì chỉ cần cố gắng.

try: 
    [CODE] 
except Exception: 
    [HANDLING CODE] 

là tốt hơn nhiều so với:

if [SPECIAL CASE]: 
    [HANDLING CODE] 
elif [special case]: 
    [SPECIAL CASE] 
[CODE] 
2

Tôi nghĩ rằng "ngoại lệ" là một thuật ngữ ngôn ngữ Python cho những gì bạn đang gọi "lỗi". Vì vậy, sử dụng thuật ngữ này khi bạn tìm kiếm thêm thông tin.

Bạn có thể thấy hữu ích khi đọc Python Standard Library documentation, "6. Built-in Exceptions".

OSError là một trong các ngoại lệ được tích hợp sẵn. Nó được định nghĩa trong phần "Built-in Exceptions", bổ sung, "Thuộc tính errno là mã lỗi số từ errno, và thuộc tính strerror là chuỗi tương ứng, như được in bởi hàm C perror(). Xem mô-đun errno , chứa tên cho các mã lỗi được xác định bởi hệ điều hành cơ bản. "

Chạy mã này:

raise OSError(42, "my exception string", "no_such_file.dat") 

mang lại cho tôi kết quả này:

Traceback (most recent call last): 
    Line 1, in <module> 
    raise OSError(42, "my exception string", "no_such_file.dat") 
OSError: [Errno 42] my exception string: 'no_such_file.dat' 

Vì vậy, tôi nghĩ rằng mã của bạn có thể làm điều gì đó như:

raise OSError(2, "No such file or directory", filename) 
Các vấn đề liên quan