【问题标题】:TypeError: need string or buffer, list foundTypeError:需要字符串或缓冲区,找到列表
【发布时间】:2013-10-04 23:33:26
【问题描述】:

我正在努力完成Learn Python the Hard Way,并坚持练习 16 的额外学分。我正在尝试读取我使用主要练习 16 创建的文件。代码我写的如下:

# pylint: disable-msg=C0103
""" This script reads and prints a file set from the argv """
from sys import argv

filename = argv

txt = open(filename)

print txt.read()

我要读取的文件是:

Derp Derp
Reading this file
Will it work?

我收到错误:TypeError: coercing to Unicode: need string or buffer, list found 但我不确定我的文件如何是一个列表而不是字符串。

【问题讨论】:

    标签: python typeerror


    【解决方案1】:

    要调试,请尝试打印filename

    【讨论】:

    • 哇,谢谢!通过打印文件名,我发现文件名是一个数组,或者我想 Python 称它为一个列表?无论如何,我通过将 filename = argv 更改为 script, filename = argv 完成了对 argv 的解包,并且一切正常。我很感激你教我做饭而不是喂我。
    【解决方案2】:

    argv 是脚本的参数列表。第一个参数是argv[1]。试试这个:

    from sys import argv
    
    txt = open(argv[1])
    
    print txt.read()
    

    重要提示:列表中的第一项几乎总是0th 项,argv 是一个例外,因为0th 参数是您的脚本名称。

    【讨论】:

    • 有道理,我不知道 argv 是如何工作的,我或者将 filename = argv 更改为 script, filename = argv。我很欣赏这个答案,并且只选择了 dbr's 作为正确的答案,因为我可以将其用作调试我提出的未来问题的灵感。
    【解决方案3】:

    我也遇到了同样的错误,但用这段代码解决了:

    from sys import argv
    
    txt = open(argv[1])
    
    print txt.read()
    

    【讨论】:

      猜你喜欢
      • 2014-03-02
      • 1970-01-01
      • 2017-03-31
      • 2014-05-07
      • 1970-01-01
      • 2021-03-28
      • 2015-02-01
      • 2014-12-21
      • 1970-01-01
      相关资源
      最近更新 更多