2014-10-25 15 views
5

Obecnie zapisywanie funkcji dla programu i jednego komponentu polega na wyszukiwaniu, czy pojedyncze zmienne są używane w pliku Pythona.TypeError: wymuszanie na Unicode, potrzeba łańcucha lub bufora, znaleziono NoneType

FUNKCJA:

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​ 

Kiedy użyłem funkcji przez siebie - funkcja działa poprawnie. Jednak kiedy wezwać programu jako całości - i pojawia się następujący komunikat o błędzie:

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 

mam bladego pojęcia - gdzie idę źle - każda pomoc będzie bardzo, bardzo, bardzo cenione !! !

dzięki.

+0

prawdopodobnie związane: [zmuszanie do Unicode: ciąg potrzebują lub bufor, NoneType znalezione podczas renderowania w Django Admin] (http: // stackoverflow. com/q/16169035/608639) i [TypeError: wymuszenie na Unicode: potrzebujesz łańcucha lub bufora, znaleziono NoneType] (http://stackoverflow.com/q/24506928/608639). – jww

Odpowiedz

8

python_filename jest ustawiony na None, który nie jest ważny argument dla funkcji open():

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

Dlaczegopython_filename jest None nie może być określona na podstawie kodu ty pisał. Ślad błędu podałeś sugeruje wartość pochodzi z funkcją sorted_list(), proponuję zacząć szukać tam śladów:

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

jednak, że to tylko przypuszczenie; będziesz musiał prześledzić cały kod w tym tracebacku, aby zobaczyć, gdzie dokładnie został ustawiony None.

+0

Skąd wiesz, że python_filename jest ustawiony na none ?? –

+2

Zostanie wyświetlony komunikat o wyjątku. 'open()' oczekiwał ciągu, ale otrzymał obiekt typu 'NoneType' zamiast tego. Jest tylko jeden * obiekt, który pasuje do tego opisu: "Brak". –

0

Spróbuj napisać w ten sposób:

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

To powinno działać

Powiązane problemy