【发布时间】:2019-05-05 21:33:09
【问题描述】:
我有一个名为“infile.bin”的二进制文件。我想制作一个程序并稍微更改一下infile(输入文件,每个字节的值加一),然后制作outfile。
为此,我在 python 中制作了以下脚本:
import sys
class assignment():
def __init__(self, infile, outfile):
if not infile.endswith('.bin'):
raise NameError("file should have '.bin' extension")
self.infile = infile
self.outfile = outfile
def read_infile(self):
with open(self.infile, "rb") as bin_in_file:
data = bin_in_file.read()
return data
def increment_write(self):
with open(self.outfile, "wb") as bin_out_file:
bin_out_file.write(bytes(item + 1 for item in data))
infile = sys.argv[1]
outfile = sys.argv[2]
main = assignment(infile, outfile).read_infile()
main2 = assignment(infile, outfile).increment_write()
print main
print main2
使用这个简单的命令运行它
python program.py infile.bin out.bin
但是当我运行脚本时它给出了这个错误:
Traceback (most recent call last):
File "program.py", line 24, in <module>
main2 = assignment(infile, outfile).increment_write()
File "program.py", line 18, in increment_write
bin_out_file.write(bytes(item + 1 for item in data))
NameError: global name 'data' is not defined
而且没有“out.bin”你知道怎么解决吗?
【问题讨论】:
-
...实例化类时传递
__init__方法中定义的两个参数? -
你已经定义了你的构造函数来接受两个参数,但是你没有传递任何参数。您需要为其提供参数。请注意,错误消息可能会令人困惑,因为它说您的构造函数接受三个参数但您只传递了一个,但您必须了解第一个参数
self是自动为您传递的。请注意,您没有对传递给脚本的参数做任何事情,您负责解析这些参数。 -
@juanpa.arrivillaga 我已经完成了(就像 eddied 问题一样)但得到了同样的错误。
-
对不起,我不明白。你做了什么究竟?您可以通过其他尝试及其错误消息来编辑您的问题
-
哦,我明白你添加了什么,但这不是我要说的。同样,您已经定义了 constructor 即
__init__yo 接受两个参数,但您传递了零个参数。你预计会发生什么?
标签: python oop command-line