python - 使用 OOP 运行 python 脚本时出错
问题描述
我有一个名为“ infile.bin
”的二进制文件。我想制作一个程序并稍微更改 infile (输入文件,每个字节的值加一),然后 make 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
”你知道怎么解决吗?
解决方案
这就像在 Java(或任何其他 OOP 语言)中调用需要参数的类的构造函数,而不需要任何参数。当然,这是行不通的——但这是你在做的时候所做的assignment().read_infile()
——你创建了一个类的新对象assignment
,调用不带参数的构造__init__
函数(除了self
),然后调用read_infile()
生成的对象。
因此,您需要从命令行读取文件并将其传递给构造函数:
import sys
...
infile = sys.argv[1] # refers to the second command-line argument, which would be "infile.bin"
outfile = "some_other_file.bin"
main = assignment(infile, outfile).read_infile()
推荐阅读
- flutter - 如何返回上一屏并重新加载第一屏的所有功能?
- functional-programming - 任意曲线的递归弧长重新参数化
- nativescript - Nativescript Algolia iOS 构建失败
- python - SpaCy 将新行 (\n) 标记为 GPE 命名实体
- excel - 将范围乘以值将值粘贴到另一个工作表中并还原更改
- html - 我在我的页面上制作了一个响应式视频,但现在我无法将其居中
- c# - RedirectToAction 到多个 HttpPost Action
- c# - 如何使用枚举作为字符串检索数据(EF Core)
- angular - Angular4 提供的服务在公共函数中未定义
- r - 在 R 中整理数据以按组添加变量(列)和观察值(行)