为什么Python不喜欢python字符串中的双下划线呢?

问题描述

我一直在阅读有关整形以及Python中使用双下划线的内容,但是所有这些都适用于单引号内的字符串字段吗?

在下面的代码示例中, 'C:\\Apps\\Quotes\\data\\GetQuoteslog__2020_08_11.txt'失败 但 'C:\\Apps\\Quotes\\data\\GetQuoteslog_2020_08_11.txt'有效。

def log_message(logFilename,logMessageText):
    #logFilename = "./data/GetQuotesStoreBlobs_log.txt"
    file1 = open(logFilename,"a")  # append mode
    file1.write(logMessageText + "\n")
    file1.close()


filename = 'C:\\Apps\\Quotes\\data\\GetQuoteslog__2020_08_11.txt'
print("filename=" + filename)
log_message(filename,"Test permission error")

错误是权限被拒绝或以下(取决于文件是否存在):

Traceback (most recent call last):
  File "C:/Apps/Quotes/testLog.py",line 11,in <module>
    log_message(filename,"Test security")
  File "C:/Apps/Quotes/testLog.py",line 4,in log_message
    file1 = open(logFilename,"a")  # append mode
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Apps\\Quotes\\data\\GetQuoteslog__2020_08_11.txt'

编辑/更新: 我想我更改了路径名以简化更长的路径名,因此当我输入正确的目录名时,我的代码现在无法重现。我认为我认为双下划线是问题所在。 但这是更大的程序的一部分,当我将日期时间添加到日志文件名时,该程序开始出现该错误。我可能已经得出结论了,但不幸的是目前无法重现。 我根本不认为双下划线是问题。

解决方法

Python在打开带有双下划线的文件时没有问题。如果您遇到权限错误,那是因为该文件已经在某处打开。如果您没有在其他程序中打开它,则可能没有正确关闭它。这可能是由于在点击“关闭”之前遇到了错误。为避免将来出现这种情况,请使用:

def log_message(logFilename,logMessageText):
    with open(logFilename,"a") as file1:
        file1.write(logMessageText + "\n")

FileNotFoundError的另一个问题是,因为文件不存在。如果要创建它(如果不存在),则“模式”字符串应为"a+",而不仅仅是"a"。因此,最终函数名称应为:

def log_message(logFilename,"a+") as file1:
        file1.write(logMessageText + "\n")

编辑:

也就是说,您应该避免使用双下划线,因为Python确实使用双下划线来表示特殊的变量和函数。如果可能的话,最好为了清楚起见而将它们清除。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...