python - 为什么 Python 不喜欢在 python 字符串中使用双下划线呢?
问题描述
我一直在阅读有关 mangling 以及双下划线在 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 遇到的另一个问题是,该文件不存在。如果你想在它不存在的情况下创建它,你的 'mode' 字符串应该是"a+"
,而不仅仅是"a"
. 所以最终的函数名应该是:
def log_message(logFilename, logMessageText):
with open(logFilename, "a+") as file1:
file1.write(logMessageText + "\n")
编辑:
也就是说,你应该避免使用双下划线,因为 Python 确实使用它们来表示特殊的变量和函数。如果可能的话,为了清楚起见,最好远离它们。
推荐阅读
- r - 有没有办法计算特定单词在 R 中出现的次数
- html - Onclick 2 叠加图像
- flutter - 我正在尝试使用网络打印机打印列之间有空格的列,但问题是它显示没有空格的列
- php - 使用锚标记将数据发送到另一个文件中的php脚本并同时打开引导模式
- python - 程序侦听套接字并运行一次,但第二次什么也不做
- installation - Isabelle 输出面板中没有输出
- python - scipy.sparse 矩阵的 Python 线性代数运算
- azure - 如何限制对默认 Azure 网站的访问?
- python - 为什么 Websocket 在 Python 类中没有收到消息?
- javascript - node-cron 和 setInterval() 的区别