【问题标题】:How to convert strings to integers in Python如何在 Python 中将字符串转换为整数
【发布时间】:2014-07-02 16:02:38
【问题描述】:

我有将整数转换为字符串以将其写入文件的代码,但是将其转换回整数以便我可以通过简单的方程式进行运算的代码不起作用。

我的代码: 写作:

saveposx = open("sevedposx.txt", "w")
saveposy = open("sevedposy.txt", "w")
saveposx.write(str(x))
saveposy.write(str(y))

x = 32y = 32 也是如此

阅读:

readposx = open("sevedposx.txt", "r")
readposy = open("sevedposy.txt", "r")
posx = readposx.read(50)
posy = readposy.read(50)
actposx = int(posx)
actposy = int(posy)
actpos = ((actposx - 2), (actposy - 2))

xy 在循环外部定义,以允许重写 xy

我的代码给了我这个错误:

  File "name_yet_to_come.py", line 399, in <module>
    actposx = int(posx)
ValueError: invalid literal for int() with base 10: ''

谢谢

【问题讨论】:

  • 您是否关闭过saveposxsaveposy?您需要这样做才能提交对文件的更改。
  • 这可能是因为许多不同的问题,所以这里有一些调试建议:检查文件sevedposx.txtsevedposy.txt 是否确实存在并且实际上包含您期望它们的内容。在posx=readposx.read(50) 之后立即插入print(repr(posx)),对于posy 也是如此;你得到你期望的结果了吗?
  • 它们都存在并且都包含 32,并且它们打印正确
  • 你的意思是,在actposx = int(posx) 之前添加print "DEBUG:", posx 会打印DEBUG: 32 然后引发异常?
  • 不,它只是在 python 解释器中打印 DEBUG: 32,当我将它写入程序时它打印然后返回错误

标签: python type-conversion


【解决方案1】:

错误消息表明文件为空。可能输出文件变量仍然在范围内被引用 / ,或者还没有被垃圾收集。

使用

with open(...) as f:
    pass # do something with f here

在作用域结束时自动刷新和关闭文件。

或者直接使用f.close() 明确关闭它们,然后考虑使用try finally 块。

您也可以在此范围内打开多个文件,如 How can I open multiple files using "with open" in Python? 中进一步说明的那样。

with open('a', 'w') as a, open('b', 'w') as b:
    pass # do something with a and b here

如果您想进行 IPC,请改用 TCP 流或 Pipe()(或更好:Queue())。

【讨论】:

  • 它们都被写入文件并正确读取,我运行 python 解释器并告诉它 r = open("sevedposx.txt", "r") 并打印 r.read(2) 和它应该返回 32。
  • 这没有意义。程序完成后,文件确实存在并已完全写入。该问题仅在程序运行期间出现。只需在整数转换前打印出posx/y的repr()即可。
【解决方案2】:

您必须在写入后关闭文件以确保所有内容都已保存。 因此,对于写作部分,您应该添加行

saveposx.close()
saveposy.close()

【讨论】:

  • 在我添加后它返回 ValueError: invalid literal for int() with base 10: '31.97' 这与之前不同,只是因为它添加了 '31.97'
  • 31.97 似乎快 32 了。你确定 x 和 y 是 int 类型吗?您可以尝试使用 saveposx.write(str(int(round(x))))
  • 当我将它写入文件时,我必须将其转换为 str,在文件中他们都说 32,所以不,在文件中它们不是 int,当我这样做时它起作用了@用户336957
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-27
  • 2010-10-31
  • 1970-01-01
  • 2021-11-12
  • 2016-12-29
  • 2013-02-18
相关资源
最近更新 更多