Python error TypeError: function takes exactly 1 a

2019-09-20 07:21发布

Traceback (most recent call last):
  File "wdd.py", line 164, in <module>
    file.write("temperature is ", temperature, "wet is ", humidity, "%\n")
TypeError: function takes exactly 1 argument (5 given)

Python:

 # -*- coding: utf-8 -*-
"""
Created on Sun Jan 26 14:24:43 2014

@author: pi
"""
import smtplib
import RPi.GPIO as gpio
import time
gpio.setwarnings(False)
gpio.setmode(gpio.BOARD)
time.sleep(1)
data=[]
def delay(i): #20*i usdelay
    a=0
    for j in range(i):
        a+1
j=0
#start work
gpio.setup(7,gpio.OUT)
#gpio.output(12,gpio.HIGH)
#delay(10)
gpio.output(7,gpio.LOW)
time.sleep(0.02)
gpio.output(7,gpio.HIGH)
i=1
i=1

#wait to response
gpio.setup(7,gpio.IN)
gpio.setup(15,gpio.OUT)
gpio.setup(16,gpio.OUT)


while gpio.input(7)==1:
    continue


while gpio.input(7)==0:
    continue

while gpio.input(7)==1:
        continue
#get data

while j<40:
    k=0
    while gpio.input(7)==0:
        continue

    while gpio.input(7)==1:
        k+=1
        if k>100:break
    if k<3:
        data.append(0)
    else:
        data.append(1)
    j+=1

print "Sensor is working"
#get temperature
humidity_bit=data[0:8]
humidity_point_bit=data[8:16]
temperature_bit=data[16:24]
temperature_point_bit=data[24:32]
check_bit=data[32:40]

humidity=0
humidity_point=0
temperature=0
temperature_point=0
check=0



for i in range(8):
    humidity+=humidity_bit[i]*2**(7-i)
    humidity_point+=humidity_point_bit[i]*2**(7-i)
    temperature+=temperature_bit[i]*2**(7-i)
    temperature_point+=temperature_point_bit[i]*2**(7-i)
    check+=check_bit[i]*2**(7-i)

tmp=humidity+humidity_point+temperature+temperature_point
print "temperature is " , temperature,"*C"
print     "wet is ",humidity, "%"
import smtplib
import RPi.GPIO as GPIO
import time
if check == tmp:
    print "temperature is ", temperature,"wet is ",humidity,"%"
#file = open("wdd.txt","w")
#file.write ("temperature is ", temperature, "wet is ", humidity, "%\n")
#file.close()
    #print "temperature is ", temperature,"wet is ",humidity,"%"
    while True:

      #check.close()
      if temperature>28:

   #while temperature>29:
#   continue
       GPIO.output(15,True) 
       file = open("wdd.txt", "w")

       file.write("The fan 1 was turn on\n")
       file.close()
     # print "1"
      break
        #continue 

#      time.sleep(2)

    while True:
    if temperature<24:

#continue
         GPIO.output(15, False)
         file = open("wdd.txt", "w")

         file.write("The fan 1 was turn off\n") 
         file.close()

    #print "2"
    break
        #continue
#   time.sleep(2)
    while True:
    if humidity>89:
         #check.close()
       #continue
         GPIO.output(16,True)
     file = open("wdd.txt", "w")

         file.write("The fan 2 was turn on\n")
         file.close()
#print "3"
    break
        #continue
#          time.sleep(2)

    while True:
    if humidity<80: 
        #check.close()      
#continue
         GPIO.output(16, False)
         file = open("wdd.txt", "w")

         file.write("The fan 1 was turn off\n")
         file.close()

    #print "4"
    break
        #continue
#    k   time.sleep(2)
   # print "a"  
else:
    print "something is worong"



if check == tmp:
#    print "temperature is ", temperature,"wet is ",humidity,"%"
 file = open("wdd.txt","w")
 file.write("temperature is ", temperature, "wet is ", humidity, "%\n")
 file.close()
    #print "temperature is ", temperature,"wet is ",humidity,"%"

1条回答
对你真心纯属浪费
2楼-- · 2019-09-20 08:10

file.write() only takes one argument, a string. You've given it five instead:

file.write("temperature is ", temperature, " wet is ", humidity, "%\n")

Make that one string:

file.write("temperature is " + str(temperature) + " wet is " + str(humidity) + "%\n")

or use string formatting:

file.write("temperature is {} wet is {}%\n".format(temperature, humidity))

file.write() does not act like a print statement.

查看更多
登录 后发表回答