到目前为止,我有这个:
import datetime
f = open("log.txt", "a", encoding='UTF-8')
print ("Log file created")
print ("Enter /close to leave.")
spc = " "
while 1:
msg = input(">>:")
now = datetime.datetime.now()
now1 = str(now)
if msg == None:
pass
if msg == " ":
pass
else:
msg2 = now1+spc+msg+"\n"
if msg == "/close":
exit()
f.write(msg2)
f.flush()
但是,此行无法正常运行,它仍然在日志文件上返回空行:
if msg == None:
pass
我希望它不返回任何内容,而只是继续while循环,我该如何解决呢?
您应该使用
if msg is None:
pass
编辑
您错过了传递功能的全部意义。我会这样重写你的样子。这样,我们仅在味精不是错误输入之一的情况下处理此问题。一旦完成,我们就会跳出循环。
...
while 1:
msg = input(">>:")
now = datetime.datetime.now()
now1 = str(now)
if not msg in [None, " "]
msg2 = now1+spc+msg+"\n"
if msg == "/close":
exit()
f.write(msg2)
f.flush()
break
pass
之后,仍将继续循环的其余部分,并且由于None
不等于" "
,因此这意味着将从msg2 = now1+spc+msg+"\n"
开始的程序段执行。您需要通过将if ... if ... else
更改为if
来将if msg == " ":
组合为单个elif msg == " ":
块,或者将if msg == None: pass
更改为if msg == None: continue
。
try:
msg2 = now1+spc+msg+"\n"
if msg == "/close":
exit()
f.write(msg2)
f.flush()
except:
pass #example for a function: return None or raise
您的情况没有任何意义。 input
函数将永远不会返回None
,只会返回字符串。
如果要跳过空字符串,则更好的测试方法是if not msg
(空字符串为“ falsy”)。或者,如果要拒绝所有全空白字符串,请尝试if not msg.strip()
(在检查字符串的其余部分是否为空之前,它会删除前导和尾随空白)。
[此外,编写只包含if
的pass
语句很少是一个好主意。相反,请反转测试,以便对于要运行某些代码的情况(在这种情况下,当msg
不为空或全为空白时)为真,而仅忽略不采取任何措施的情况:
while 1: msg = input(">>:") now = datetime.datetime.now() now1 = str(now) if msg.strip(): # msg is not empty or all whitespace msg2 = now1+spc+msg+"\n" if msg == "/close": exit() f.write(msg2) f.flush()
最后一期(与主要问题无关)。 Python的
exit
函数主要用于交互式解释器。它是通过site
模块添加到内置文件中的,因此,如果Python是通过-S
标志运行的,则它将不存在。如果要关闭解释器,则应调用sys.exit
,引发SystemExit
异常或只在主模块的末尾运行(break
语句可能会对显示的循环执行此操作在这里,如果您在某处使用函数,则可能是return
。