gpt4 book ai didi

python - Google 的 Python 练习默认编程出错 'Copyspecial'

转载 作者:行者123 更新时间:2023-12-03 08:11:26 27 4
gpt4 key购买 nike

我得到一个 IndexError: list index out of range使用 --todir 时出错Google Python 练习中的选项 copyspecial.py .我该如何解决这个问题?最让我困惑的是,导致它的代码部分是由讲师(来自谷歌/斯坦福)编写的。我只能假设某些语法错误已经溢出到其他代码行中,或者自 Python 2.7 以来内置函数语法发生了变化。这个练习代码是在 2.7 中编写的。

该文件在不使用任何选项时有效,如下所示:

Printing list of special files

C:.\gpe\copyspecial\xyz__hello__.txt

C:.\gpe\copyspecial\zz__something__.jpg

done



这是错误:

error

编码:
def main():
# This basic command line argument parsing code is provided.
# Add code to call your functions below.

# Make a list of command line arguments, omitting the [0] element
# which is the script itself.
args = sys.argv[1:]
if not args:
print "usage: [--todir dir][--tozip zipfile] dir [dir ...]";
sys.exit(1)

# todir and tozip are either set from command line
# or left as the empty string.
# The args array is left just containing the dirs.
todir = ''
if args[0] == '--todir':
todir = args[1]
del args[0:2]

tozip = ''
if args[0] == '--tozip':
tozip = args[1]
del args[0:2]

if len(args) == 0:
print "error: must specify one or more dirs"
sys.exit(1)

# +++your code here+++
# Call your functions

上述所有代码均直接来自 google.com。我的代码在 main() 定义之前和它说 # +++your code here+++ 之后出现

我花了几个小时试图解决这个问题。我学到了很多,但不是解决方案。
  • 我试过改变缩进。
  • 我试过做sys.exit(1)嵌套在 ' --todir 下' ' if ',但程序一直运行到 'if tozip ' 部分,这让我相信它是句法的。但是我找不到放错位置的(): .我还检查了缩进。
  • 我试过添加一个'if args[0]: ' 检查,但它不起作用,因为正如我后来了解到的,虽然是一个空列表 ('args[0]' = []) , Python 不会将其解释为实际的 ' False ' 值(value)。
  • 名单还在继续

  • 我非常感谢有机会在 stackoverflow 上让社区听到我的问题,尤其是作为第一次发帖。

    最佳答案

    据我所知,如果你做得对,你的第三次尝试应该会奏效:

    tozip = ''
    if args and args[0] == '--tozip':
    tozip = args[1]
    del args[0:2]

    这实际上检查了列表 args .如果为空( []),则认为是 False,第二次测试 args[0] == '--tozip'没有得到评估。

    你的问题是 args本身是一个空列表, 评估为 False (见 https://docs.python.org/2/library/stdtypes.html#truth-value-testing ),因此您无法访问 args[0]并检查它的结果是相同的 Indexerror .

    但是,您仍然会得到 IndexError如果因为访问 args[1] 而只传递其中一个参数而不传递参数未经测试。

    编辑(为什么代码不按原样运行?):我不认为任何 python 版本 >=2.4 会以不同的方式解释这一点,但我没有证据。这个参数传递是非常基本的。检查格式错误的用户输入总是很“烦人”,因为您必须处理所有可能的输入,这会导致大量代码。如果您想详细了解参数传递,我推荐 argparse模块( 2.73.5)。我的感觉是,为了避免大部分练习文件与练习无关,他们就这么简单了。如果您没有提供至少一个文件路径作为参数,则无论如何都会在下一步中收到错误消息:
    if len(args) == 0:
    print "error: must specify one or more dirs"
    sys.exit(1)

    所以代码 按原样运行。您只需要提供正确的参数。

    关于python - Google 的 Python 练习默认编程出错 'Copyspecial',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33294021/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com