本文介绍一种无需 `os` 模块即可防止用户名重复导致文件覆盖的简洁方案:利用 python 内置 `open()` 的 `'x'`(独占创建)模式,在文件已存在时自动抛出 `fileexistserror`,从而安全拦截重复注册。
在受限环境中(如无法导入 os 模块),判断目标文件是否已存在常被误认为必须依赖
os.listdir() 或 os.path.exists()。但 Python 标准库提供了更轻量、更语义化且完全无需额外导入的解决方案——open() 函数的 'x' 模式。
'x' 是 Python 3.3+ 引入的独占创建模式:它仅在指定路径不存在任何文件或目录时才成功打开并返回文件对象;一旦目标路径已存在,立即抛出 FileExistsError 异常。这恰好契合“检查 + 创建”的原子性需求,既避免竞态条件(race condition),又无需遍历目录。
以下是优化后的用户创建代码:
new_username = input('Please choose a username: ').strip()
if not new_username:
print("Username cannot be empty!")
else:
new_password = input('Please choose a password: ')
title = new_username + '.txt'
try:
with open(title, 'x') as file: # ← 关键:'x' 模式确保不覆盖
file.write(new_password)
print("User successfully created!")
except FileExistsError:
print("User already exists! Please choose a different username.")
except OSError as e:
print(f"Failed to create user file: {e}")✅ 优势说明:
⚠️ 注意事项:
综上,open(..., 'x') 是在无 os 模块约束下实现安全文件创建的首选方案,兼顾简洁性、安全性与可移植性。