为什么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, logMessageText):
with open(logFilename, "a+") as file1:
file1.write(logMessageText + "n")

编辑:

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

最新更新