2013-04-17 37 views
23

Làm thế nào để định dạng một câu lệnh khẳng định dài tuân thủ PEP8? Xin vui lòng bỏ qua bản chất giả tạo của ví dụ của tôi.Làm thế nào để định dạng một câu lệnh xác nhận python phù hợp với PEP8?

def afunc(some_param_name): 
    assert isinstance(some_param_name, SomeClassName), 'some_param_name must be an instance of SomeClassName, silly goose!' 

Không thể bao bọc trong dấu ngoặc đơn, vì thay đổi hành vi của tuyên bố xác nhận vì đó là từ khóa chứ không phải hàm dựng sẵn.

+0

'assert' nên thực sự chỉ được sử dụng cho ** gỡ lỗi ** mục đích, sử dụng bất kỳ khác là lạm dụng của 'chức năng assert'. Tất cả 'assert' cũng bị loại bỏ khi chạy python với tùy chọn '-O'. – Wessie

+4

@Wessie Tôi không thấy điều đó có liên quan như thế nào. –

Trả lời

39

Điều quan trọng cần nhớ là PEP8 chỉ là hướng dẫn và even states that there are times when the rules should be broken.

Nhưng quan trọng nhất: biết khi nào không nhất quán - đôi khi hướng dẫn kiểu chỉ không áp dụng.

Với ý nghĩ đó, tôi có lẽ sẽ viết những dòng này với dòng cũ theo phong cách tiếp tục:

def afunc(some_param_name): 
    assert isinstance(some_param_name, SomeClassName), \ 
      'some_param_name must be an instance of SomeClassName, silly goose!' 

Nếu điều đó không ngồi tốt với bạn (hoặc Linter của bạn), bạn luôn có thể làm:

def afunc(some_param_name): 
    assert isinstance(some_param_name, SomeClassName), ( 
      'some_param_name must be an instance of SomeClassName, silly goose!') 

hoặc thậm chí:

def afunc(some_param_name): 
    assert isinstance(some_param_name, SomeClassName), ( 
      'some_param_name must be an instance of SomeClassName, ' 
      'silly goose!') 
+1

+1. Tôi cho rằng đây là giải pháp dễ đọc hơn ở đây. Sự tiếp tục của khung được * ưa thích * đối với việc tiếp tục đường gạch chéo ngược, nhưng đó là một tuyên bố chung và các trường hợp riêng lẻ khác nhau. –

+0

+1 cho "quy tắc phải bị hỏng". Tôi có xu hướng sử dụng sự tiếp tục dòng kiểu cũ, nếu chỉ vì đó là giải pháp đòi hỏi phải có vài lần gõ phím nhỏ nhất để viết. Đó cũng là một trong những lý do tôi thích Python với PHP: 'def' ngắn hơn' hàm'. Tất nhiên, có nhiều lý do thuyết phục hơn thế. ;-) – Aya

+0

Tuyệt vời, cảm ơn. Hoàn toàn đồng ý về PEP8 là một hướng dẫn. Chúng tôi sử dụng flake8 (kết hợp các pyflakes và pep8.py), và tôi đã thấy rằng có * một cái gì đó * sẽ thỏa mãn tinh thần của PEP8 cũng như các linters. – stantonk

4
ERR_MESSAGE_01 = ''' 
Some really long error message 
''' 

assert condition(a,b), ERR_MESSAGE_01 

Làm thế nào tôi làm điều đó ... và tôi nghĩ rằng việc tuân thủ tốt ..

+1

Khi bài đăng nói về tuân thủ PEP-8, tên 'CAPS_WITH_UNDERSCORES' không giúp ích gì. –

+0

vâng điểm công bằng ... chuyển từ C#defines và hằng số. hoài nghi ... nhưng im bám vào nó.bên cạnh tôi đang nghĩ về nó như là một hằng số mức module mà pep8 cho chúng ta biết tên như vậy –

+3

Hằng số: Hằng số thường được định nghĩa ở cấp mô-đun và được viết bằng tất cả các chữ cái viết hoa với dấu gạch dưới tách các từ. Ví dụ bao gồm MAX_OVERFLOW và TOTAL. –

3

Cần lưu ý rằng nó có thể được bọc bằng dấu ngoặc đơn, không theo cách bạn đang nghĩ.

assert isinstance(some_param_name, 
        SomeClassName), ('some_param_name must be an instance of ' 
            'SomeClassName, silly goose!') 

Tôi sẽ không cho rằng điều này đặc biệt dễ đọc. Trong một số trường hợp, nó có thể là lựa chọn đúng.

1
def afunc(some_param_name): 
    assert (isinstance(some_param_name, SomeClassName) 
      ), 'some_param_name must be an instance of SomeClassName, silly goose!' 

Điều này cho phép bạn tiếp tục dòng liên tục từ dấu ngoặc đơn được PEP 8 đề xuất mà không vi phạm hành vi khẳng định.

Hoặc:

def afunc(some_param_name): 
    assert isinstance(some_param_name, SomeClassName), (
      'some_param_name must be an instance of SomeClassName, silly goose!') 
Các vấn đề liên quan