2014-04-15 20 views
193

Tôi có một phương thức đôi khi trả về giá trị NoneType. Vì vậy, làm thế nào tôi có thể đặt câu hỏi một biến đó là một NoneType? Tôi cần phải sử dụng nếu phương pháp, ví dụLàm thế nào để "kiểm tra" NoneType trong python?

if not new: 
    new = '#' 

Tôi biết đó là một cách sai lầm và tôi hy vọng bạn hiểu những gì tôi muốn nói.

+0

Tôi nghĩ rằng điều này đã được trả lời [ở đây] (http://stackoverflow.com/questions/14247373/python-none-comparison-should-i-use-is-or) và dường như một nơi nào đó trước khi – yorodm

+0

Nếu 'None' là giá trị duy nhất mà phương thức của bạn trả về mà 'bool (returnValue)' bằng 'False', thì' nếu không mới: 'phải hoạt động tốt. Điều này đôi khi xảy ra trong các thư viện tích hợp - ví dụ: ['re.match'] (https://docs.python.org/2/library/re.html#re.match) trả về None hoặc một kết hợp thật vật. – Kevin

Trả lời

302

Vậy làm cách nào tôi có thể đặt câu hỏi cho biến là NoneType?

Sử dụng is điều hành, như thế này

if variable is None: 

Tại sao các công trình này?

Kể từ None là đối tượng singleton duy nhất của NoneType bằng Python, chúng ta có thể sử dụng is điều hành để kiểm tra xem một biến có None trong đó hay không.

Trích dẫn từ is docs,

Các nhà khai thác isis not thử nghiệm cho nhận dạng đối tượng: x is y là đúng nếu và chỉ nếu xy là cùng một đối tượng. x is not y mang lại giá trị chân lý nghịch đảo.

Vì chỉ có thể có một trường hợp None, is sẽ là cách ưa thích để kiểm tra None.


Nghe nó từ miệng của ngựa

Trích dẫn Python's Coding Style Guidelines - PEP-008 (cùng được xác định bởi Guido mình),

So sánh để độc thân như None nên luôn luôn được thực hiện với is hoặc is not , không bao giờ là nhà khai thác bình đẳng.

+0

Chỉ sử dụng biến 'z = là None' hoạt động nếu bạn không cần câu lệnh if có điều kiện. –

38
if variable is None: 
    print 'Is None' 

-

if variable is not None: 
    print 'Isn\'t None' 
4

Nó cũng có thể được thực hiện với isinstance theo Alex Hall's answer:

>>> NoneType = type(None) 
>>> x = None 
>>> type(x) == NoneType 
True 
>>> isinstance(x, NoneType) 
True 

isinstance cũng là trực giác, nhưng đó là sự phức tạp nó đòi hỏi dòng

NoneType = type(None)

không cần thiết cho các loại như intfloat.

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