Python 3:即使 `if` 语句为真,`else` 语句也会被执行

Posted

技术标签:

【中文标题】Python 3:即使 `if` 语句为真,`else` 语句也会被执行【英文标题】:Python 3: `else` statement get executed even `if` statement was true 【发布时间】:2019-05-20 17:03:07 【问题描述】:

根据上一个问题Else statement executing even the IF statement is TRUE 提供的建议是检查缩进。我的代码中的缩进似乎是正确的。似乎是什么问题?

根据https://www.tutorialspoint.com/python/python_if_else.htm

else 语句可以与 if 语句结合使用。另一个 语句包含在条件条件下执行的代码块 if 语句中的表达式解析为 0 或 FALSE 值。

据我了解,如果if 语句正确/真,则不应执行else

然而,在这段代码中……else 语句仍然被执行……参见python myCode.py -i 8.8.8.8

C:\Python>python myCode.py
No Argument Provided


C:\Python>python myCode.py -h
usage: myCode.py [-h] [-u URL] [-i IP]

optional arguments:
  -h, --help         show this help message and exit
  -u URL, --url URL  Uniform Resource Locator
  -i IP, --ip IP     IP Address


C:\Python>python myCode.py -u google.com
~ URL is google.com


C:\Python>python myCode.py -i 8.8.8.8
~ IP Address is 8.8.8.8
No Argument Provided

C:\Python>

这是代码。

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('-u', '--url',
    help='Uniform Resource Locator' )

parser.add_argument('-i', '--ip',
    help='IP Address' )

args = parser.parse_args()

if args.ip:
    print("~ IP Address is " + args.ip)
if args.url:
    print("~ URL is " + args.url)
else:
    print("No Argument Provided")

请告诉我这里出了什么问题。 No Argument Provided 不应该在那里。

C:\Python>python myCode.py -i 8.8.8.8
~ IP Address is 8.8.8.8
No Argument Provided

【问题讨论】:

'else' 指的是最后一个if,所以如果你提供了一个 IP 但没有 URL 则执行 else-part。 【参考方案1】:

您可能需要使用elif。在您的情况下,else 被执行,因为 args.url 为空。

例如:

if args.ip:
    print("~ IP Address is " + args.ip)
elif args.url:
    print("~ URL is " + args.url)
else:
    print("No Argument Provided")

【讨论】:

Rakesh 的答案是正确的,但除此之外,还有一个更优雅的解决方案,请参阅:docs.python.org/3/library/argparse.html#mutual-exclusion

以上是关于Python 3:即使 `if` 语句为真,`else` 语句也会被执行的主要内容,如果未能解决你的问题,请参考以下文章

python中的if not 怎么用

即使两个参数都为真,如果语句返回假?

python基础:python循环三元运算字典文件操作

Python条件控制语句

JavaScript语法详解:if语句&for循环&函数

即使第一个条件为假,是不是所有条件都在 if 语句中进行检查?