[在Python 3中变量为null时如何传递

问题描述 投票:0回答:4

到目前为止,我有这个:

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循环,我该如何解决呢?

python null python-3.4
4个回答
-1
投票

您应该使用

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

0
投票

pass之后,仍将继续循环的其余部分,并且由于None不等于" ",因此这意味着将从msg2 = now1+spc+msg+"\n"开始的程序段执行。您需要通过将if ... if ... else更改为if来将if msg == " ":组合为单个elif msg == " ":块,或者将if msg == None: pass更改为if msg == None: continue


0
投票
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

-1
投票

您的情况没有任何意义。 input函数将永远不会返回None,只会返回字符串。

如果要跳过空字符串,则更好的测试方法是if not msg(空字符串为“ falsy”)。或者,如果要拒绝所有全空白字符串,请尝试if not msg.strip()(在检查字符串的其余部分是否为空之前,它会删除前导和尾随空白)。

[此外,编写只包含ifpass语句很少是一个好主意。相反,请反转测试,以便对于要运行某些代码的情况(在这种情况下,当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

© www.soinside.com 2019 - 2024. All rights reserved.