Python TypeError:强制使用Unicode:需要字符串或缓冲区,找到类型

Python TypeError:强制使用Unicode:需要字符串或缓冲区,找到类型,python,file-io,typeerror,Python,File Io,Typeerror,我正在尝试编写一个代码来读取文件并对其进行一些操作 守则: 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

我正在尝试编写一个代码来读取文件并对其进行一些操作

守则:

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是我要读取的文件,则所有模块都在同一个库中,包括.asm文件。

您有多个问题

首先,缩进不一致。这意味着导入被视为
assem
函数的一部分,而其他任何内容都不被考虑。从字面上讲,您必须了解Python的第一件事是缩进非常重要

其次,您使用内置函数名
file
,作为变量名。不要那样做

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

最后,虽然这实际上并没有引起您的问题,但您不需要同时执行
import myParser
from myParser import Parser
。挑一个

文件“C:\Python27\lib\ntpath.py”,第488行,在abspath中 path=\u getfullpathname(path)TypeError:强制使用Unicode:需要字符串或缓冲区,找到内置函数或方法


文件
是python中的内置类型,不要将此名称用于变量。请隔离、集中精力并回答相关问题,即“TypeError”。其他问题(如缩进)与此无关。人们希望找到特定问题的答案,而不是纸上考试!
   python assembler.py Add.asm