2009-04-15 28 views
28

Có cách nào để kiểm tra xem một biến (thành viên nhóm hoặc độc lập) với tên được chỉ định được xác định không? Ví dụ:Cách dễ dàng để kiểm tra xem một biến được định nghĩa trong python?

if "myVar" in myObject.__dict__ : # not an easy way 
    print myObject.myVar 
else 
    print "not defined" 
+0

lớp của bên thứ ba, cần đặt cờ cho mục đích riêng tư của tôi, không muốn làm lộn xộn lớp __init __() – grigoryvp

+0

Điều đó thực sự khó hiểu. Tại sao viết nhiều mã để xác định biến nào được sử dụng? Chỉ cần tạo một thể hiện, ví dụ in .__ dict __. Keys() hoặc làm dir (instance) và bạn biết tất cả các tên thuộc tính. –

+0

Tôi sợ tôi cũng bối rối. Câu hỏi đặt ra về cả thành viên lớp và các vars độc lập. Rõ ràng, không có __init__ cho các vars độc lập, cấp cao nhất; những gì miasma bên thứ 3 như vậy là kém xây dựng mà rất nhiều các biến của nó, ở nhiều cấp độ phạm vi, có nguy cơ hoàn toàn không tồn tại? –

Trả lời

27

Một cách nhỏ gọn: cách

print myObject.myVar if hasattr(myObject, 'myVar') else 'not defined' 

HTW là hơn Pythonic, mặc dù.

hasattr() là khác nhau từ x in y.__dict__, mặc dù: hasattr() mất lớp được thừa kế thuộc tính vào tài khoản, cũng như những động trở về từ __getattr__, trong khi y.__dict__ chỉ chứa những đối tượng mà là thuộc tính của các y dụ.

+0

Tôi nghĩ anh ấy chỉ tìm kiếm hasattr(). – monkut

+0

Vâng, có thể là vậy. Và những gì về một biến toàn cầu? (được khai báo trong mô-đun, không phải trong một không gian tên lớp)? – grigoryvp

+0

@Eye of Hell: có lẽ (x trong globals()), nhưng câu trả lời thực sự của tôi sẽ là mã mà cần phải làm điều đó là không Pythonic và thực sự nên khởi tạo biến thành None. – Miles

21
try: 
    print myObject.myVar 
except NameError: 
    print "not defined" 
+0

Ít nhất có được các biến và đầu ra phải :-) +1 – paxdiablo

+16

Nếu myObject được xác định, nhưng không có 'myVar', bạn sẽ nhận được AttributeError. –

9

Paolo là đúng, có thể có một cái gì đó ra với cách bạn đang làm mọi thứ nếu điều này là cần thiết. Nhưng nếu bạn chỉ làm một cái gì đó nhanh chóng và dơ bẩn, bạn có thể không quan tâm đến Idiomatic Python đường đi, sau đó điều này có thể ngắn hơn.

try: x 
except: print "var doesn't exist" 
4

Đọc và hay thủ thuật trong python: 'a' trong người dân địa phương() và một

+0

Không nếu có là chuỗi rỗng hoặc bất kỳ giá trị giả nào khác. –

4

Để kiểm tra xem biến, myvar, được định nghĩa:

result = dir().count('myvar') 

Nếu myvar được định nghĩa, kết quả là 1, nếu không nó sẽ là 0.

Tính năng này hoạt động tốt trong phiên bản Python 3.1.2.

+0

Tại sao không chỉ ''myvar' trong dir()', sau đó? – rdb

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