2012-04-24 7 views
3

ファイルを読み込んで操作するコードを作成しようとしています。TypeError:Unicodeに強制する:必要な文字列またはバッファー、型が見つかりました

コード:

def assem(file): 
    import myParser 
    from myParser import Parser 
    import code 
    import symboleTable 
    from symboleTable import SymboleTable 


newFile = "Prog.hack" 
output = open(newFile, 'w') 
input = open(file, 'r') 


prsr=Parser(input) 
while prsr.hasMoreCommands(): 
     str = "BLANK" 
     if(parser.commandType() == Parser.C_COMMAND): 
     str="111"+code.comp(prsr.comp())+code.dest(prsr.dest())+code.jump(prsr.jump())+"\n" 

output.write(str) 
prsr.advance() 

私が取得エラー:

私はプログラムの実行方法
Traceback (most recent call last): 
    File "assembler.py", line 11, in <module> 
    input = open(file, 'r') 
TypeError: coercing to Unicode: need string or buffer, type found 

Add.asmのIDファイルは、私が読みたい
python assembler.py Add.asm 

をすべてのモジュールは.asmファイルを含む同じライブラリにあります。

+3

'file'はpythonの組み込み型です。あなたの変数にはこの名前を使用しないでください。 – georg

答えて

6

複数の問題があります。

まず、インデントが矛盾しています。つまり、輸入はassem関数の一部とみなされますが、それ以外は何もありません。文字通り、Pythonについて最初に知っておかなければならないことは、字下げが重要であることです。

第2に、変数名に組み込みの関数名fileを使用しています。それをしないでください。

第3に、実際にはassem関数を呼び出さないでください。しかし、最初の問題のために、最初のインデントされていない行は起動時に実行されます。したがって、input = open(file, 'r')という行に達すると、fileはまだ変数(この時点では定義されていません)ではなく、組み込み関数を参照しています。

最後に、実際には問題は発生していませんが、import myParserfrom myParser import Parserの両方を実行する必要はありません。一つを選ぶ。

+0

「TypeError」である問題の問題を分離し、集中し、返信してください。他の他の問題(例えばインデント)は無関係です。人々は、紙の検査ではなく、特定の問題に関する回答を見つけることを期待しています! – Apostolos

-1

File "C:\Python27\lib\ntpath.py", line 488, in abspath path = _getfullpathname(path) TypeError: coercing to Unicode: need string or buffer, builtin_function_or_method found

関連する問題