如何修复TypeError?

时间:2018-11-30 01:59:43

标签: python function file random average

因此,我已经彻底研究了如何执行此操作,但是即使如此,我仍然遇到许多问题。这是一个接一个的错误。例如

Traceback (most recent call last):
  File "C:/Users/Owner.OWNER-PC/AppData/Local/Programs/Python/Python37-32/lab 5 maybe.py", line 41, in <module>
    main()
  File "C:/Users/Owner.OWNER-PC/AppData/Local/Programs/Python/Python37-32/lab 5 maybe.py", line 8, in main
    rand_gen(myfile)
  File "C:/Users/Owner.OWNER-PC/AppData/Local/Programs/Python/Python37-32/lab 5 maybe.py", line 19, in rand_gen
    my_file.write(line +'\n')
TypeError: unsupported operand type(s) for +: 'int' and 'str'

我在此代码中收到此错误。而且我不知道如何解决类型错误。我一直待在这似乎要花几个小时,而我所做的每一个改变似乎都会带来更多的问题。我已经读完了这本书,但没有提供任何帮助。我得到了一些东西,但这对我根本没有用。我一直在不懈地搜寻论坛。 总的来说,它需要让用户命名要写入的文件,这是可行的。 当调用其他函数以写入文件或从文件读取文件时,还需要传递参数。 第二个功能是将一系列随机数写入1-500之间的文件中,并且还需要询问要执行多少个随机数才能起作用(这意味着用户可以要求输入随机数),然后给出错误信息。 最后,第三个功能需要显示生成的数字数量,数字总和和数字平均值!预先谢谢你。

import random
import math


def main():
    myfile = str(input("Enter file name here "))
    with open(myfile, 'w+') as f:
        rand_gen(myfile)

    return f
    myfile.close

    disp_stats()

def rand_gen(myfile):
    my_file = open(myfile, 'w')
    for count in range(int(input('How many random numbers should we use?'))):
        line = random.randint(1,500)
        my_file.write(line +'\n')
    my_file.close()

def disp_stats():
    myfile = open(f,"r")
    total = 0
    count = 0
    print('The numbers are: ')
    for line in myfile:
        number = int(line)
        total += number
        count += 1
        print(number)

    average = total / count
    data = np.loadtxt(f)
    print('The count is ',count,)
    print('The sum is',total,)
    print('The average is ',format(average, '.2f'))

    myfile.close
main()

2 个答案:

答案 0 :(得分:0)

当您发现回溯错误时,请查看最后一行以查看导致错误的顶级原因。

my_file.write(line +'\n')TypeError: unsupported operand type(s) for +: 'int' and 'str'

很明显,它暗示了表达式line +'\n'

+运算符期望两个参数都具有相同的类型。(它无法找到任何采用int和字符串的重载函数定义。

这是因为line是一个整数(由randint生成),而'\ n'是一个字符串。

因此将行强制转换为字符串 line -> str(line).

新的正确行应为 my_file.write(str(line) +'\n')

答案 1 :(得分:0)

如错误消息所述,TypeError: unsupported operand type(s) for +: 'int' and 'str'。您无法将“整数”(linerandom.randint(1,500)与“字符串” '\n'串联在一起。

您可以执行以下操作:

my_file.write(str(line) +'\n')