【问题标题】:Python 2.7.3 if compare a variable to a stringPython 2.7.3 如果将变量与字符串进行比较
【发布时间】:2016-02-27 16:53:10
【问题描述】:
import serial
import MySQLdb

dbConn = MySQLdb.connect("localhost","root","test","ISEF_DB") or die ("Could not connect to database")
cursor = dbConn.cursor()

device = '/dev/ttyACM0'

try:
    print "Trying...",device
    arduino = serial.Serial(device, 250000)
except:
    print "Failed to connect on",device

try:
    data = arduino.readline() #read data
#   pieces = data.split("\t")
    print "The data is:",data
    if data == 461518B1:
        try:
            cursor.execute("UPDATE `ISEF_DB`.`attendance` SET `present`='1' WHERE `id` = '461518B1'")
            dbConn.commit()
            cursor.close()
            print "data inserted"
        except MySQLdb.IntegrityError:
            print "Failed to insert data"
        finally:
            cursor.close()
            print "done"
    elif data == 46154D41:
        try:
            cursor.execute("UPDATE `ISEF_DB`.`attendance` SET `present`='1' WHERE `id` = '46154D41'")
            dbConn.commit()
            cursor.close()
            print "data inserted"
        except MySQLdb.IntegrityError:
            print "Failed to insert data"
        finally:
            cursor.close()
            print "done"
    elif data == 4615A161:
        try:
            cursor.execute("UPDATE `ISEF_DB`.`attendance` SET `present`='1' WHERE `id` = '4615A161'")
            dbConn.commit()
            cursor.close()
            print "data inserted"
        except MySQLdb.IntegrityError:
            print "Failed to insert data"
        finally:
            cursor.close()
            print "done"
    elif data == 4616A511:
        try:
            cursor.execute("UPDATE `ISEF_DB`.`attendance` SET `present`='1' WHERE `id` = '4616A511'")
            dbConn.commit()
            cursor.close()
            print "data inserted"
        except MySQLdb.IntegrityError:
            print "Failed to insert data"
        finally:
            cursor.close()
            print "done"
    elif data == 46193031:
        try:
            cursor.execute("UPDATE `ISEF_DB`.`attendance` SET `present`='1' WHERE `id` = '46193031'")
            dbConn.commit()
            cursor.close()
            print "data inserted"
        except MySQLdb.IntegrityError:
            print "Failed to insert data"
        finally:
            cursor.close()
            print "done"
    elif data == 46196771:
        try:
            cursor.execute("UPDATE `ISEF_DB`.`attendance` SET `present`='1' WHERE `id` = '46196771'")
            dbConn.commit()
            cursor.close()
            print "data inserted"
        except MySQLdb.IntegrityError:
            print "Failed to insert data"
        finally:
            cursor.close()
            print "done"
    elif data == 461A79D1:
        try:
            cursor.execute("UPDATE `ISEF_DB`.`attendance` SET `present`='1' WHERE `id` = '461A79D1'")
            dbConn.commit()
            cursor.close()
            print "data inserted"
        except MySQLdb.IntegrityError:
            print "Failed to insert data"
        finally:
            cursor.close()
            print "done"
    elif data == 46211881:
        try:
            cursor.execute("UPDATE `ISEF_DB`.`attendance` SET `present`='1' WHERE `id` = '46211881'")
            dbConn.commit()
            cursor.close()
            print "data inserted"
        except MySQLdb.IntegrityError:
            print "Failed to insert data"
        finally:
            cursor.close()
            print "done"
    elif data == 465598F1:
        try:
            cursor.execute("UPDATE `ISEF_DB`.`attendance` SET `present`='1' WHERE `id` = '465598F1'")
            dbConn.commit()
            cursor.close()
            print "data inserted"
        except MySQLdb.IntegrityError:
            print "Failed to insert data"
        finally:
            cursor.close()
            print "done"
    elif data == 9A2DCDE4:
        try:
            cursor.execute("UPDATE `ISEF_DB`.`attendance` SET `present`='1' WHERE `id` = '9A2DCDE4'")
            dbConn.commit()
            cursor.close()
            print "data inserted"
        except MySQLdb.IntegrityError:
            print "Failed to insert data"
        finally:
            cursor.close()
            print "done"
    else:
        print "Card not recognized"

except:
    print "Failed to get data"

这段代码给了我以下错误

  File "test.py", line 19
    if 461518B1 == data:
              ^
SyntaxError: invalid syntax

我想要做的是将变量与字符串进行比较,但它不起作用。我看不出我做错了什么。数据值只能是包含数字和字母的 10 个 if 语句之一。我没有看到任何语法问题。有人可以帮忙解决错误吗?

谢谢

【问题讨论】:

  • 461518B1 不是字符串,"461518B1"'461518B1' 是。
  • 另外,您提供的跟踪不可能来自您提供的代码,因为您的代码中不存在if 461518B1 == data:
  • 您正在将某物与它不是的某物进行比较。

标签: python mysql-python pyserial


【解决方案1】:

虽然这不能直接回答您的问题(在 cmets、viz

461518B1 不是字符串,"461518B1"'461518B1'

(使用引号指定字符串字面量)

我要指出,您可以修改代码以避免冗余,因为您似乎在每个 if/elif` 块中使用相同的代码块:

id_values = ['461518B1', '46154D41', '4615A161', '4616A511', '46193031', '46196771', '461A79D1', '46211881', '465598F1', '9A2DCDE4']

data = arduino.readline() # read data
data = data.strip()       # get rid of whitespace like '\r\n'
print "The data is:",data
if data in id_values:
    try:
        cursor.execute("UPDATE 'ISEF_DB'.'attendance' SET 'present'='1' WHERE 'id' = '" + data + "'")
        dbConn.commit()
        cursor.close()
        print "data inserted"
    except MySQLdb.IntegrityError:
        print "Failed to insert data"
    finally:
        cursor.close()
        print "done"
else:
    print "Card not recognized {}".format(data)

【讨论】:

  • 谢谢,我明白了。 id_values 来自刷到 arduino rfid 评估盾牌的 rfid 卡。打印行The data is: 显示来自 rfid 卡的正确 ,但是程序以 Card not recognized 结束。所以,我知道卡正在被读取,读取的值是可能的id_values 之一。变量data 与程序中的id_values 之一不相关,即使它们匹配。有什么想法吗?
  • 试试if data.strip() in id_values:
  • @TurnerEison 你能测试解决方案吗?
  • 我的问题是,读者将其作为值读取,然后在末尾添加 \r\n。
  • strip() 函数应该解决这个问题,不是吗?
猜你喜欢
  • 2018-03-17
  • 1970-01-01
  • 2015-10-03
  • 1970-01-01
  • 2016-03-03
  • 2015-11-21
  • 2015-08-14
  • 2018-05-01
  • 1970-01-01
相关资源
最近更新 更多