【问题标题】:getting TypeError in file but correct answer in shell在文件中获取 TypeError 但在 shell 中得到正确答案
【发布时间】:2017-03-07 08:15:25
【问题描述】:

我的代码如下:

def randword():
    #american-english-small can be replaced with american-english[-large|-huge]
    DICT = open('/usr/share/dict/american-english-small', 'r')
    length = len(DICT.readlines())
    print(length)
    randline = randint(1, length)
    print(randline) 
    word = DICT.readline(randline)
    print(word)
    DICT.close()
    return word
    #return DICT.readline(randint(1, len(DICT.readlines())))

最后一行是我的原始代码,剩下的就是我拆开找问题。在我的终端中,一切都正确:

>>> DICT = open('/usr/share/dict/american-english-small', 'r')
>>> word = DICT.readline(46957)
>>> print(word)
AIDS's

但是,当我运行我的文件时,在查找行和读取行之间出现错误:

51175
18132

运行时错误的回溯:

 +---+
 |   |
 O   |
/|\  |
/ \  |
     |
==========

Incorrect guesses: a b c d e f 

Traceback (most recent call last):
  File "/home/joshua/Documents/Coding/Python/hangman.py", line 123, in     <module>
    main()
  File "/home/joshua/Documents/Coding/Python/hangman.py", line 117, in main
    "\nThe word was " + secretWord + ".")
TypeError: Can't convert 'int' object to str implicitly

知道我做错了什么吗?提前致谢。

【问题讨论】:

  • 该错误会有所帮助...另外,您要完成什么?
  • @juanpa.arrivillaga 添加。我正在尝试从字典文件中选择一个随机单词。每个单词都在自己的行中,如下所示:a\n an\n animal\n
  • 您向我们展示的错误消息与您发布的代码无关。
  • 嗯,首先,readline(46957) 并没有做你认为它正在做的事情。它正在读取 下一行 并设置字节大小的上限,而不是读取第 46957 行。其次,您显示的错误只是说secretWordint,并且您试图将其与+ 添加到字符串中,这是不允许的。最后,既然你已经做了readlines(),你已经用尽了文件,readline 将返回空字符串:''
  • @juanpa.arrivillaga 哦,我明白了。在这种情况下,我如何阅读第 46957 行?感谢您的帮助。

标签: python python-3.x file-io


【解决方案1】:

根据回溯,secretWord 是整数而不是字符串:

"\nThe word was " + secretWord + ".")
TypeError: Can't convert 'int' object to str implicitly

没有看到您分配secretWord 的其他代码,我猜secretWord 是列表或字典的索引,而您应该这样做

"\n`enter code here`The word was " + wordcontainer[secretWord] + "."

其中 wordcontainer 是单词列表或字典。

编辑

也有可能您只是碰巧随机绘制了页码或类似文档的一部分,因此当您从文档中读取该行时,它会以整数形式读取。在这种情况下,您要么需要处理这种可能性,要么考虑使用已经采用 Python 格式的现有单词列表。

from nltk.corpus import words #You will need to use nltk.download() to download this in addition to using pip to install the package.
wordlist = words.words()

【讨论】:

  • 对,但我不知道为什么。代码是secretWord = randword(),我没有理由看到 randword() 应该计算为整数。
  • 好吧,尝试在该行之前打印secretWord 对象,看看会发生什么。 print(type(secretWord), secretWord)
  • 从头开始。我复制了print(type(secretWord)),由于某种原因它出现在&lt;class 'str'&gt;。不过,我仍然收到 TypeError,不知何故,它在此处和循环结束之间变成了一个整数。感谢您的领导。
  • 你需要在定义secretWord的后面加上打印行,否则你没有定义它,它不知道你在说什么。
  • 所以要调试,然后在整个脚本中放置相同的打印语句,看看它在哪里发生了变化。你也可以考虑只使用一个预先存在的语料库(见我的回答)。
【解决方案2】:

我是个傻瓜——我在同一个语句中有多行,但回溯只返回最后一行。 @user2357112 在我之前就想通了。 我修复之前的代码:

            print("You've run out of guesses. \nYou had " + len(errors) +
              " errors and " + len(correctGuesses) + " correct guesses. " +
              "\nThe word was " + secretWord + ".")

之后:

            print("You've run out of guesses. \nYou had " + str(len(errors)) +
              " errors and " + str(len(correctGuesses)) + " correct guesses. " +
              "\nThe word was " + secretWord + ".")

感谢@juanpa.arrivillaga 修复了我认为我有的问题;我将readline(n) 切换为linecahce.getline(n),这样就解决了我的输入问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 2017-03-06
    相关资源
    最近更新 更多