TypeError:强制转换为Unicode:需要字符串或缓冲区,找到类型

Itz*_*984 4 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, '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()
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

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
Run Code Online (Sandbox Code Playgroud)

我如何运行该程序:

   python assembler.py Add.asm
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*man 8

你有很多问题.

首先,你的缩进是不一致的.这意味着导入被视为assem功能的一部分,但没有别的.从字面上看,你必须要了解的关于Python的第一件事是缩进很重要.

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

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

最后,虽然这不是真正引起你的问题,你不需要做两import myParserfrom myParser import Parser.选一个.

  • 请隔离、集中和回复有问题的问题,即“TypeError”。其他其他问题(例如缩进)是无关紧要的。人们希望找到特定问题的答案,而不是纸上考试! (2认同)