在声明之后用作对象时是否有任何潜在的漏洞?

时间:2018-05-21 07:41:05

标签: python python-3.x with-statement

我在virtualenv中使用python3.6。而且我想知道我是否使用来自外部的对象并声明。

这是问题的示例代码。

with tempfile.NamedTemporaryFile(delete=False) as tf:
    tf.write(audio_stream)

# outside of with
print(tf.name)  # is it dangerous?

我只想用语句写,并做其他的东西。 (例如tf.name)。从外部访问tf对象是否存在潜在威胁? (无意的垃圾收集等)

如果不推荐,我也想知道确切的原因。感谢

1 个答案:

答案 0 :(得分:1)

没有无意的垃圾收集。每类对象决定退出with对它的意义,因此没有硬性规则。通常保持资源(如基础文件句柄)已关闭,但在关闭期间通常不会更改的其他属性不会更改。

在您的情况下,临时文件已关闭,因此读/写/搜索等...不起作用,但name属性可以安全阅读。

如果您确实需要了解给定对象,请打开其来源并查看其__exit__方法。