web-dev-qa-db-ja.com

TypeError:Unicodeに強制変換、文字列またはバッファが必要、NoneTypeが見つかりました

現在、プログラムと1つのコンポーネントの関数を作成しているのは、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

どこが間違っているのか、まったくわかりません。どんな助けでも、とても、とても、とても大事にされます!!!

ありがとう。

5
Vanessa_Gez

_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
_

Why _python_filename_ is Noneは投稿したコードから判断できません。指定したトレースバックは、値がsorted_list()関数に由来することを示唆しています。ここで、手がかりを探し始めることをお勧めします。

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

ただし、これは単なる推測です。正確にNoneが最初に設定されている場所を確認するには、そのトレースバック内のすべてのコードをトレースする必要があります。

10
Martijn Pieters

このように書いてみてください:

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

それはうまくいくはずです

0
Vikram Sharma