TypeError: приведение к Unicode, нужна строка или буфер, найден NoneType

В настоящее время пишется функция для программы, и один компонент должен искать, используются ли отдельные переменные в файле python.

ФУНКЦИЯ:

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​

Когда я использовал функцию сам по себе - функция работает правильно. Однако, когда я вызываю программу в целом, я получаю следующее сообщение об ошибке:

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

Я совершенно не понимаю, где я ошибаюсь, любая помощь будет очень, очень, очень ценна!!!

Благодарю.


person Vanessa_Gez    schedule 25.10.2014    source источник


Ответы (2)


python_filename устанавливается в None, что не является допустимым аргументом для функции open():

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

Почему python_filename является None, нельзя определить по опубликованному вами коду. Предоставленная вами трассировка предполагает, что значение происходит из функции sorted_list(), я предлагаю вам начать искать подсказки:

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

Однако это всего лишь предположение; вам придется проследить весь код в этой трассировке, чтобы увидеть, где именно None впервые установлен.

person Martijn Pieters    schedule 25.10.2014
comment
Откуда вы знаете, что для python_filename установлено значение none?? - person Vanessa_Gez; 25.10.2014
comment
Сообщение об исключении говорит вам. open() ожидал строку, но вместо этого получил объект типа NoneType. Под это описание подходит только один объект: None. - person Martijn Pieters; 25.10.2014

Попробуйте написать так:

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

Он должен работать

person Vikram Sharma    schedule 21.12.2015