为什么 Python 似乎 运行 else 语句,尽管 if 子句为真?

Why does Python seem to run the else statement although the if clause is true?

我试图在 Python 3.10 中编写一个简单的程序,它打开(至少)一个浏览器 window 并且可以从命令行获取输入以打开其他 windows:

import webbrowser
import sys

if len(sys.argv) > 1:
    for a in range(len(sys.argv)):
        webbrowser.open(sys.argv[a])
else:
    webbrowser.open("www.google.com")

我 运行 从单行批处理文件中输入,这样我就可以输入要打开的其他网站。这确实很好用,但是,无论是否传递命令行参数,它总是打开 Google(如果我只是 运行 它没有参数,它会打开 Google。如果我 运行 它以例如 LinkedIn 作为参数,它打开 Google 和 LinkedIn。如果我使用维基百科和 LinkedIn 作为参数,它打开这两个加上 Google 等)。

然而我想要的是 Google 仅在没有传递参数时打开...奇怪的是当我 运行 完全相同 代码,但用 print 语句替换 webbrowser.open(),它完全按照它应该做的去做:

import sys

if len(sys.argv) > 1:
    for a in range(len(sys.argv)):
        print(sys.argv[a])
else:
    print("www.google.com")

将命令行参数传递给此代码会导致它仅打印参数,“www.google.com”仅在未传递任何参数时打印。

对不起,我完全不知道为什么这两个代码的行为不同。我通过 运行ning 一个批处理文件来解决这两个问题

@py.exe C:\Users\[Route to the file]\[File].py %*

我尝试用 elif len(sys.argv) == 1 替换 else 语句,但效果完全一样。我看到的唯一区别是 webbrowser 模块的用法。导入模块可以那样改变代码的行为吗?

提前致谢!

argv 捕获 python 脚本名称和您已经知道的网站,因为您正在检查 len > 1。但是,您随后将遍历所有 args,导致浏览器尝试将脚本名称和网站加载为网站。由于脚本名称不是有效的 url,我假设您的浏览器正在打开您的默认页面,该页面恰好是 google.com.

您需要跳过第一个参数,您可以通过 sys.arvg[1:]

import webbrowser
import sys

if len(sys.argv) > 1:
    for a in sys.argv[1:]:
        webbrowser.open(a)
else:
    webbrowser.open("www.google.com")