Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么';f';没有定义吗?_Python - Fatal编程技术网

Python 为什么';f';没有定义吗?

Python 为什么';f';没有定义吗?,python,Python,我是Python新手,下面是关于文件处理的教程 如果向下滚动,您可以看到如何使用Python关闭文件,在该文件下,他正在使用try和finally, 我的问题是,在我的程序中,我得到一个错误:'f'未定义 为什么我会遇到这个问题?我错过什么了吗 示例: try: f = open("test.txt",encoding = 'utf-8') finally: f.close() 我不想从一本好书开始。您最好使用以下语法: with open("test.txt", encoding

我是Python新手,下面是关于文件处理的教程

如果向下滚动,您可以看到如何使用Python关闭文件,在该文件下,他正在使用
try
finally
, 我的问题是,在我的程序中,我得到一个错误:'f'未定义

为什么我会遇到这个问题?我错过什么了吗

示例:

try:
   f = open("test.txt",encoding = 'utf-8')
finally:
   f.close()

我不想从一本好书开始。

您最好使用以下语法:

with open("test.txt", encoding = 'utf-8') as f:

    # Do something with f

无需关闭它,
with
为您完成此操作。

您可能遇到的错误是
名称“f”无法定义
,因为如果在
打开
方法期间出现错误,您将永远不会分配
f
,因此它最终不会在
中定义。解决方案是在以下情况之前指定另一个值:

f = None
try:
    f = open("test.txt", encoding='utf-8')
except FileNotFoundError as fnfe:
    print("File not found")
    exit(10)
finally:
    if f:
        f.close()
但是,由于这种语法不太正确,您可以使用
with
语句,当您离开块时,该语句会自动关闭对象,但请确保捕获
FileNotFoundError

try:
    with open("test.txt",encoding = 'utf-8') as f:
       # perform file operations
except FileNotFoundError as fnfe:
    print("File not found")

处理文件时,请始终使用
语句。我得到了一个不能定义的
名称“f”
。在我的情况下,您确定要得到
f未定义
?@azro我不明白您的意思。如果您尝试打开的文件不存在,
f
将不会被定义,并且您最终会在
块中得到此错误。这不是一个好的编码示例,本教程的整个章节都不应该再使用了。使用文件的“正确”方法是使用
和open('test.txt')作为f:
已经有相当一段时间了。@azro除了此之外,没有其他方法修复OP的代码。。。或者只需使用
除了
并跳过issue@roganjosh看看我的答案,有,但不是nice@Tomerikoo答案已被编辑,我的评论与一个不再是实际答案一部分的句子相关。我觉得整个结构似乎不正确。您应该在
中使用open()
尝试
。第一个块不是最佳实践,第二个方法仍然会失败,如果找不到文件(无论
with
块中是否存在异常),我的错误是:
名称“f”未定义,但正常。第一个解决方案不起作用,
没有这样的文件或目录:“test.txt”
即使您使用
try:
@nakE add an
,它仍然需要找到该文件,除了像我一样的
,您的路径不正确