【发布时间】:2018-03-11 23:31:34
【问题描述】:
主要问题
我目前正在尝试在我的 Mac OS 上运行 this 特定的 Github 项目。它肯定是为运行 Python 2 的系统编写的。但是,我正在运行 Python3,我需要对程序进行一些修改。除了以下修改之外,这些修改中的大多数都可以无缝运行。
当我用这个命令运行程序时...
python3 separate_dsd.py -i ./../../Ricotti\ \&\ Alburquerque\ -\ Dont\ You\ Believe\ Me.mp3 -o ./ -m ./../../model1.pkl
...我收到错误 NameError: name 'file' is not defined。在 Python3 中,文件已替换为 io.open。但是,简单地用io.open 替换函数调用会给我一个错误。
具体行是,代码块的f=file(filename,'rb'):
def load_model(filename):
f=file(filename,'rb')
params=pickle.load(f)
f.close()
return params
这位于文件/DeepConvSep/examples/dsd100/separate_dsd.py 中。现在我将如何用io.open 替换file(filename,'rb') 的确切行为?
对以下答案的回应
目前我尝试遵循@abarnert 的建议并将我的代码更改为:
def load_model(filename):
with open(filename, 'rb') as f:
return pickle.load(f)
但我仍然得到错误:
Traceback (most recent call last):
File "separate_dsd.py", line 336, in <module>
main(sys.argv[1:])
File "separate_dsd.py", line 333, in main
train_auto(inputfile,outdir,model,0.3,30,25,32,513)
File "separate_dsd.py", line 250, in train_auto
params=load_model(model)
File "separate_dsd.py", line 19, in load_model
params=pickle.load(f)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xbb in position 2: ordinal not in range(128)
【问题讨论】:
-
你试过在代码上运行
2to3吗?您不必让它为您自动修复代码,但将其差异作为建议阅读是非常有帮助的。在这种情况下,它应该建议使用open代替file,这正是您需要开始的。 -
实际上,未经测试……它可能不建议。因为在 2.3-2.5 时代的某个地方,
file已经不是完全弃用但不鼓励支持open,而2to3检查器假定您从惯用的 2.6 或 2.7 代码开始...... -
@abarnert 看看我上面的编辑。让我尝试运行 2to3
-
您能向我们展示您尝试生成的代码吗?你有没有放弃
'rb'模式?在 Python 3 中,这意味着您希望使用默认编码将文件解码为 Unicode 文本,而这不适用于二进制文件。 -
@abarnert 请查看我的编辑,这可能会让我更清楚地了解我的尝试。
标签: python python-3.x macos io