2014-10-25 10 views
5

Hiện tại, viết một hàm cho một chương trình và một thành phần là tìm kiếm xem một biến duy nhất có đang được sử dụng trong tệp python hay không.LoạiError: liên kết với Unicode, cần chuỗi hoặc bộ đệm, NoneType tìm thấy

CHỨC NĂNG:

def SINGLE_CHAR_VAR(python_filename): 
    file = open(python_filename) 
    lines = [0] 
    SINGLE_CHAR_VAR = [] 
    for line in file: 
     stripped = line.strip('\n\r') 
     lines.append(stripped) 

    from utils import vars_indents 
    variable_list = (vars_indents(python_filename))[0] 
    for i in range(1, len(variable_list)): 
     if len(variable_list[i][0][0]) == 1: 
      SINGLE_CHAR_VAR.append(['SINGLE_CHAR_VAR', i, variable_list[i][0][1], variable_list[i][0][0], lines[i]])  
    return SINGLE_CHAR_VAR​ 

Khi tôi sử dụng các chức năng của bản thân - các chức năng hoạt động đúng. Tuy nhiên khi tôi kêu gọi các chương trình như một toàn thể - tôi nhận được thông báo lỗi sau:

Traceback (most recent call last): 
    File "<web session>", line 1, in <module> 
    File "lint_2.py", line 141, in lint 
    sorted_error_list = sorted_list(list_of_file_errors) 
    File "lint_2.py", line 84, in sorted_list 
    error_list = total_error_list(python_filename) 
    File "lint_2.py", line 65, in total_error_list 
    single_char_var_list = SINGLE_CHAR_VAR(python_filename) 
    File "lint_2.py", line 33, in SINGLE_CHAR_VAR 
    file = open(python_filename) 
TypeError: coercing to Unicode: need string or buffer, NoneType found 

Tôi hoàn toàn không có ý tưởng - nơi tôi sẽ sai - bất kỳ trợ giúp sẽ được rất, rất, rất yêu mến !! !

cảm ơn.

+0

Có thể liên quan: [ép buộc sang Unicode: cần chuỗi hoặc đệm, NoneType tìm thấy khi render trong Django admin] (http: // stackoverflow. com/q/16169035/608639) và [TypeError: liên kết với Unicode: cần chuỗi hoặc bộ đệm, NoneType được tìm thấy] (http://stackoverflow.com/q/24506928/608639). – jww

Trả lời

8

python_filename được thiết lập để None, mà không phải là một đối số hợp lệ cho open() chức năng:

>>> open(None) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: coercing to Unicode: need string or buffer, NoneType found 

Tại saopython_filenameNone không thể được xác định từ mã bạn được đăng. Traceback bạn cung cấp cho thấy giá trị bắt nguồn từ sorted_list() chức năng, tôi đề nghị bạn bắt đầu tìm kiếm các manh mối có:

File "lint_2.py", line 84, in sorted_list 
    error_list = total_error_list(python_filename) 

Tuy nhiên, đó chỉ là một phỏng đoán; bạn sẽ phải theo dõi qua tất cả các mã trong traceback đó để xem chính xác nơi nào None được đặt đầu tiên.

+0

Làm thế nào để bạn biết rằng python_filename được đặt thành không? –

+2

Thông báo ngoại lệ cho bạn biết. 'open()' mong đợi một chuỗi, nhưng đã được đưa ra một đối tượng kiểu 'NoneType' thay thế. Chỉ có một đối tượng * one * phù hợp với mô tả đó: 'None'. –

0

Hãy thử viết theo cách này:

ssh.exec_command() 
stdin.flush() 
stdin.channel.shutdown_write() 

Nó sẽ làm việc

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