2012-04-24 175 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 

我怎么运行程序:

python assembler.py Add.asm 

其中Add.asm ID我想读取文件,所有模块都在同一个库中,包括.asm文件。

+3

'file'是python中的一个内置类型,不要将这个名称用于你的变量。 – georg 2012-04-24 19:40:22

回答

6

您有多个问题。

首先,您的缩进不一致。这意味着进口被认为是assem函数的一部分,但没有别的。从字面上讲,你必须知道的第一件事是缩进是重要的。其次,您正在使用内置函数名称file作为变量的名称。不要这样做。

第三,你实际上没有调用assem函数。但由于你的第一个问题,第一个没有缩进的行在启动时执行。因此,当达到input = open(file, 'r')行时,file仍然指内置函数,而不是您的变量(此处未定义)。

最后,虽然这实际上并不会导致您的问题,但您不需要同时执行import myParserfrom myParser import Parser。选一个。

+0

请隔离,集中并回答有关问题,即“TypeError”。其他其他问题(例如缩进)是无关紧要的。人们希望找到关于特定问题的答案,而不是纸质考试! – Apostolos 2018-01-26 09:57:20

-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

相关问题