2011-09-22 17 views
7

Dưới đây là tình hình của tôi:Python làm thế nào để kiểm tra nếu biến tồn tại và chiều dài của nó, trong một nếu tuyên bố?

if var: 
    if len(var) == 5: 
     do something... 
else: 
    do the same thing... 

Để tránh lặp lại cùng một đoạn mã, tôi muốn kết hợp những 2 nếu có điều kiện, trong một. Nhưng nếu var là None, tôi không thể kiểm tra chiều dài của nó ... Bất kỳ ý tưởng? Tôi muốn một cái gì đó như thế này:

if var and len(var) == 5: 
    do something... 
+4

Những gì bạn đề xuất là tốt. 'if var và len (var) == 5' sẽ hoạt động –

+0

Ngoài những gì mọi người đã nói (nghĩa là đề xuất của bạn thực sự hoạt động như bạn mong đợi) tại sao bạn kiểm tra thời lượng nếu bạn vẫn làm điều tương tự? Cũng lưu ý rằng nói chung khi bạn có một cơ thể mã mà bạn không muốn lặp lại công cụ để sử dụng là một hàm hoặc một phương thức (tùy thuộc vào bao nhiêu bối cảnh là cần thiết bởi mã). – 6502

+0

Tôi không nên đặt câu hỏi vào ban đêm, hy vọng sẽ nhận được câu trả lời vào buổi sáng ... Tôi chắc chắn rằng tôi đã thử điều đó và nó không hoạt động ... – Tickon

Trả lời

14

Bạn đã thử? Nó hoạt động:

if var and len(var) == 5: 
    .... 

Toán tử and không đánh giá RHS nếu LHS là sai. Hãy thử điều này:

>>> False and 1/0 
False 
>>> True and 1/0 
ZeroDivisionError: division by zero 
+0

nếu var không tồn tại, anh ấy muốn làm điều gì đó Ồ không? – steabert

+2

@steabert: Thêm 'không' hoặc' else' vào mã của bạn khi bạn thấy phù hợp. Tôi không ở đây để viết mã của bạn, chỉ để trả lời câu hỏi. –

+0

Có một snag ở đây (có thể có hoặc không liên quan đến @Tickon): Giải pháp này không phân biệt giữa các trường hợp 'var == []' và 'var là None'.Trong trường hợp trước, 'len (var)' có thể được xác định ('== 0'), trong trường hợp sau nó không thể. (Tuy nhiên, tôi không nghĩ rằng đây là một lý do để downvote câu trả lời này) –

3

Các mã như bạn đã viết nó trong câu hỏi thực thi những điều khoản trong hai trường hợp:

  • var để đánh giá đúng và có chiều dài 5
  • var đánh giá để sai (ví dụ như nó None hoặc False)

Bạn có thể kết hợp những thành một điều kiện như sau:

if not var or len(var) == 5: 
    ... 

Các điều kiện rằng một số câu trả lời khác đang đề xuất, var and len(var) == 5, chỉ đánh giá để True trong trường hợp đầu tiên, không phải là thứ hai. Tuy nhiên, tôi sẽ nói rằng hai trường hợp bạn đã chọn là một sự kết hợp bất thường. Bạn có chắc chắn bạn không có ý định thực hiện các câu lệnh chỉ khi biến có giá trị không sai có chiều dài là 5?

Ngoài ra, như 6502 đã viết trong nhận xét, chức năng được dự định cho trường hợp này chính xác, cụ thể là tạo các khối mã có thể sử dụng lại được. Vì vậy, một giải pháp dễ dàng khác sẽ là

def f(): 
    .... 
if var: 
    if var.length == 5: 
     f() 
else: 
    f() 
0

Vâng, ngoại lệ dường như hoàn toàn ổn tại đây.

try: 
    if len(var) == 5: 
     do_something() 
except TypeError: 
    pass 

Bạn đang nói rằng var có thể rỗng, do đó, ngoại lệ TypeError sẽ bị ném. Tuy nhiên, nếu thực tế, var có thể không tồn tại, bạn nên bắt giữ ngoại lệ NameError.

+0

Đây là giải pháp thực hiện chính xác những gì @Tickon đang yêu cầu. Chỉ khi 'var là None' (hoặc một kiểu không thể mô tả khác, nhưng không được hỏi ở đây), ngoại lệ sẽ được kích hoạt. Và nó là nhiều Pythonic cho những gì nó có giá trị. –

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