【问题标题】:Python print the possible error of a methodPython 打印方法的可能错误
【发布时间】:2019-10-08 23:51:26
【问题描述】:

我的代码类似于:

with open('folder/file.txt', 'w') as file:
    file.write(json.dumps(someJsonData))

在我的程序中,每个实例都有一个用户。此特定代码位于一个循环内,该循环编辑多个其他用户的数据文件,并且始终是当前用户的代码。该代码在其他用户上运行良好,但当前用户的文件永远不会更改,即使我可以验证它确实运行并且它没有给出错误消息。考虑到我之前在程序中打开和关闭过这个文件,我可能忘记关闭它,但是我找不到我没有关闭的地方(我没有使用with整个时间打开文件) .

在此之前,我遇到过用不同语言编写的类似问题并且能够打印隐藏的错误消息。

有没有办法打印这段代码的每个输出?例如,它可能会说“成功写入文件”或“警告:无法打开文件”。你能做一些 try-catch 的事情来总是得到一个可打印的输出吗?

【问题讨论】:

  • 你能解释一下你所说的是什么意思吗?它不会更新文件,即使它正在写入文件”
  • @Selcuk 这将打开一个用户数据文件。该程序的设置方式是,每个实例都以用户身份运行。此代码在一个循环中,它编辑多个其他用户的数据文件,并且始终是当前用户。更新其他用户的文件没有问题,但永远不会更新当前用户的文件,即使我让它打印它之前要写入的内容并且之后不会出错。我希望有一种方法可以查看是否存在“隐藏错误”,即使错误可能在其他地方。
  • 存在文件不存在、权限无效、I/O 问题等错误。Python 很擅长不做“隐藏”的事情。错误是您有 99.999999% 的确定性。您正在查看错误的路径、有空数据或类似情况。我们不能帮助诊断不合理的假设。我们需要一个可重现的例子。
  • 请提出一个实际反映您遇到的确切问题以及您如何知道存在问题的问题,而不是您认为需要如何解决的问题。尝试制作一个简短但完整的示例,让其他人可以在他们的计算机上运行,​​按照您的说明逐步执行,并观察您想到的问题。
  • @KarlKnechtel,谢谢,我会记住这一点。在尼克的回答的帮助下,我能够间接解决我的问题。我试图删除这个问题,因为你提到的原因它不是一个很好的问题,但是 StackOverflow 希望我保留它,因为已经发布了一个答案。

标签: python python-3.x


【解决方案1】:

据我所知,没有。

您在帖子中命名的所有函数都不会返回额外信息或隐藏警告;为了进一步诊断,我们需要查看您的实际代码。不过,您可能想尝试一些事情。

  • .write()returns the number of bytes已经写了;这可以根据预期输出进行检查,以确保文件接收到适当数量的输入。
  • open()specifically handling encoding errors 选项,但默认是引发 ValueError,所以如果您现在没有收到错误,更改它可能会或可能不会帮助您。
  • 检查以确保您尝试写入的文件没有在其他地方以只读模式意外打开,或者在您检查时没有被写入 - 在这种情况下,用户数据文件通常是罪魁祸首。
  • 确保文件已正确关闭。如果您使用with,它应该会自动关闭,但我相信我记得读过python isn't guaranteed to write 它的缓冲区,除非调用close()。 (使用 with 时,一旦超出范围,就会在幕后发生这种情况。)

【讨论】:

  • 感谢您的回答,只是为了澄清一下,只读是指f = open('path', 'r'),然后再次使用f,而不是先使用f.close
  • 我更多地指的是在另一个程序中打开的文件会对其设置编辑锁定,或者是指一个程序打开多个指向同一文件的指针,即f = open('path', 'w'),然后是@987654334 @。由于open() 的每个实例都有自己的文件指针,我想在其中一个上调用.close() 可能很容易破坏另一个的编辑。以任何方式用任何语言打开指向同一个文件的多个指针都是令人头疼的问题,通常最好避免。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
  • 2020-07-18
相关资源
最近更新 更多