2012-07-16 15 views

Trả lời

49

Đối số duy nhất để nâng cao chỉ ra ngoại lệ được nâng lên. Đây phải là một trường hợp ngoại lệ hoặc một lớp ngoại lệ (một lớp xuất phát từ Ngoại lệ).

Hãy thử điều này:

test = 'abc' 
if True: 
    raise Exception(test + 'def') 
14

Nó phải là một ngoại lệ.

Bạn muốn làm một cái gì đó như:

raise RuntimeError(test + 'def') 

Trong Python 2.5 và dưới đây, mã của bạn sẽ làm việc, như sau đó nó đã được cho phép để nâng cao chuỗi như trường hợp ngoại lệ. Đây là một quyết định rất tồi tệ và bị loại bỏ trong phiên bản 2.6.

+2

Ông có thể giải thích lý do tại sao nó là như vậy xấu để nâng cao một chuỗi như là một ngoại lệ? – BioGeek

+3

@BioGeek Các vấn đề với chuỗi ngoại lệ chỉ bao gồm đôi khi làm việc khi một chữ được sử dụng trong cả 'nâng cao' và' ngoại trừ', không cung cấp cơ chế OO để đính kèm thông tin bổ sung vào ngoại lệ và không cho phép bắt loại nhiều loại ngoại lệ . Các ngoại lệ được thêm vào ngôn ngữ trước các lớp, và một khi các lớp ngoại lệ được thêm vào ngoại lệ chuỗi chỉ được giữ cho khả năng tương thích ngược. Loại bỏ của họ, giống như bất kỳ loại bỏ tính năng nào (mis-), đơn giản hóa ngôn ngữ. –

+0

Cảm ơn bạn đã đề cập đến phiên bản mà tính năng này được hỗ trợ lần cuối. Điều đó đã giúp tôi. – SpaceTrucker

32

Bạn không thể raise a str. Chỉ Exception s có thể là raise d.

Vì vậy, bạn nên xây dựng một ngoại lệ với chuỗi đó và nâng cao điều đó. Ví dụ, bạn có thể làm:

test = 'abc' 
if True: 
    raise Exception(test + 'def') 

HOẶC

test = 'abc' 
if True: 
    raise ValueError(test + 'def') 

Hy vọng rằng sẽ giúp

+0

Ngoài ra bạn không thể chỉ tăng mà không có bất kỳ đối số. –

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