繁体   English   中英

TypeError:需要类似字节的 object,而不是 'str' [Python3.7 使用来自 python2 的代码]

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM