![](/img/trans.png)
[英]Changing Python2 to Python3 Error: TypeError: a bytes-like object is required, not 'str'
[英]TypeError: a bytes-like object is required, not 'str' [Python3.7 using code from python2]
我运行这个 py 文件。
writer.writerow([0]+[PrivacyAgent.get_m(r) for r in range(len(Delta_accountant)-1)])
with open(save_dir + '/specs.csv', 'wb') as csvfile:
writer = csv.writer(csvfile, delimiter=',')
if FLAGS.priv_agent == True:
writer.writerow([0]+[PrivacyAgent.get_m(r) for r in range(len(Delta_accountant)-1)])
if FLAGS.priv_agent == False:
writer.writerow([0]+[FLAGS.m]*(len(Delta_accountant)-1))
writer.writerow(Delta_accountant)
writer.writerow(Accuracy_accountant)
并得到这个错误
Traceback (most recent call last):
File "sample.py", line 90, in <module>
tf.compat.v1.app.run(main=main, argv=[sys.argv[0]] + unparsed)
File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/platform/app.py", line 36, in run
_run(main=main, argv=argv, flags_parser=_parse_flags_tolerate_undef)
File "/usr/local/lib/python3.7/dist-packages/absl/app.py", line 308, in run
_run_main(main, args)
File "/usr/local/lib/python3.7/dist-packages/absl/app.py", line 254, in _run_main
sys.exit(main(argv))
File "sample.py", line 36, in main
sample(N=FLAGS.N, b=FLAGS.b, e=FLAGS.e,m=FLAGS.m, sigma=FLAGS.sigma, eps=FLAGS.eps, save_dir=FLAGS.save_dir, log_dir=FLAGS.log_dir)
File "sample.py", line 33, in sample
save_dir=save_dir, log_dir=log_dir)
File "/content/drive/MyDrive/Colab_Notebooks/machine-learning-diff-private-federated-learning-main_v2/DiffPrivate_FedLearning.py", line 192, in run_differentially_private_federated_averaging
accuracy_accountant + [float('nan')], privacy_agent, FLAGS)
File "/content/drive/MyDrive/Colab_Notebooks/machine-learning-diff-private-federated-learning-main_v2/Helper_Functions.py", line 279, in save_progress
writer.writerow([0]+[PrivacyAgent.get_m(r) for r in range(len(Delta_accountant)-1)])
TypeError: a bytes-like object is required, not 'str'
我见过几个例子说使用.encode()
或 add b
可能会有所帮助,但我真的不知道该放在哪里,有人可以帮助我吗? 非常感谢。
问题在于这行代码:
with open(save_dir + '/specs.csv', 'wb') as csvfile:
# this ^^
您正在以二进制模式打开 output 文件,因此您的 CSV 编写writer
object 在收到文本时会抱怨。 由于文本模式是open()
的默认模式,只需将该行更改为:
with open(save_dir + '/specs.csv', 'w') as csvfile:
你应该准备好了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.