Python 验证从传感器接收的变量

Python 验证从传感器接收的变量,python,variables,multiple-conditions,Python,Variables,Multiple Conditions,我有一个设备,它输出几个值,通常如下所示: -1.6410,0.5390,0.5570 -1.6160,0.3860,0.5620 -1.4890,-0.0760,0.5260 -1.4120,-0.1740,0.5290 -1.2920,-0.2160,0.6110 -1.2520,-0.2510,0.6450 -1.2530,-0.2270,0.6330 -1.2670,-0.2220,0.6530 -1.2350,-0.2250,0.7170 -1.4470,-0.3840,0.2400

我有一个设备,它输出几个值,通常如下所示:

-1.6410,0.5390,0.5570
-1.6160,0.3860,0.5620
-1.4890,-0.0760,0.5260
-1.4120,-0.1740,0.5290
-1.2920,-0.2160,0.6110
-1.2520,-0.2510,0.6450
-1.2530,-0.2270,0.6330
-1.2670,-0.2220,0.6530
-1.2350,-0.2250,0.7170
-1.4470,-0.3840,0.2400
-1.2670,-0.7480,0.0630
-1.0690,-0.9340,-0.1400
-0.9440,-1.0000,-0.2440
这三个数字可以是任意长度,也可以是正数或负数。是否有一种方法(在Python中)检查返回的是有效的数字而不是文本字符串(如“校验和错误”等)?我不知道会收到什么文本错误,所以我想尝试验证是否收到了数字。这可能吗

我曾考虑为每个变量使用一个简单的IF语句,但这似乎很笨拙。例如:

if (value1 > -9999) and (value1 < 9999):
...
如果(值1>-9999)和(值1<9999):
...

我必须对这三个值中的每一个都这样做。有更简单的方法吗?

解决方案可能很简单:尝试获取值,如果失败(抛出一些预测的异常),将其视为无效条目并忽略它

lines = """
-1.6410,0.5390,0.5570
-1.6160,0.3860,0.5620
-1.4890,-0.0760,0.5260
-1.4120,-0.1740,0.5290
-1.2920,-0.2160,0.6110
-1.2520,-0.2510,0.6450
-1.2530,-0.2270,0.6330
-1.2670,-0.2220,0.6530
-1.2350,-0.2250,0.7170
-1.4470,-0.3840,0.2400
-1.2670,-0.7480,0.0630
BAD GUY WAS HERE
-1.0690,-0.9340,-0.1400
-0.9440,-1.0000,-0.2440
"""

for line in lines.strip().split("\n"):
    try:
        x, y, z = map(float, line.split(","))
        # continue processing here
        print x, y, z
    except ValueError:
        print "I do not like this line", line
        continue

解决方案可能很简单:尝试获取值,如果失败(抛出一些预测的异常),将其视为无效条目并忽略它

lines = """
-1.6410,0.5390,0.5570
-1.6160,0.3860,0.5620
-1.4890,-0.0760,0.5260
-1.4120,-0.1740,0.5290
-1.2920,-0.2160,0.6110
-1.2520,-0.2510,0.6450
-1.2530,-0.2270,0.6330
-1.2670,-0.2220,0.6530
-1.2350,-0.2250,0.7170
-1.4470,-0.3840,0.2400
-1.2670,-0.7480,0.0630
BAD GUY WAS HERE
-1.0690,-0.9340,-0.1400
-0.9440,-1.0000,-0.2440
"""

for line in lines.strip().split("\n"):
    try:
        x, y, z = map(float, line.split(","))
        # continue processing here
        print x, y, z
    except ValueError:
        print "I do not like this line", line
        continue

解决方案可能很简单:尝试获取值,如果失败(抛出一些预测的异常),将其视为无效条目并忽略它

lines = """
-1.6410,0.5390,0.5570
-1.6160,0.3860,0.5620
-1.4890,-0.0760,0.5260
-1.4120,-0.1740,0.5290
-1.2920,-0.2160,0.6110
-1.2520,-0.2510,0.6450
-1.2530,-0.2270,0.6330
-1.2670,-0.2220,0.6530
-1.2350,-0.2250,0.7170
-1.4470,-0.3840,0.2400
-1.2670,-0.7480,0.0630
BAD GUY WAS HERE
-1.0690,-0.9340,-0.1400
-0.9440,-1.0000,-0.2440
"""

for line in lines.strip().split("\n"):
    try:
        x, y, z = map(float, line.split(","))
        # continue processing here
        print x, y, z
    except ValueError:
        print "I do not like this line", line
        continue

解决方案可能很简单:尝试获取值,如果失败(抛出一些预测的异常),将其视为无效条目并忽略它

lines = """
-1.6410,0.5390,0.5570
-1.6160,0.3860,0.5620
-1.4890,-0.0760,0.5260
-1.4120,-0.1740,0.5290
-1.2920,-0.2160,0.6110
-1.2520,-0.2510,0.6450
-1.2530,-0.2270,0.6330
-1.2670,-0.2220,0.6530
-1.2350,-0.2250,0.7170
-1.4470,-0.3840,0.2400
-1.2670,-0.7480,0.0630
BAD GUY WAS HERE
-1.0690,-0.9340,-0.1400
-0.9440,-1.0000,-0.2440
"""

for line in lines.strip().split("\n"):
    try:
        x, y, z = map(float, line.split(","))
        # continue processing here
        print x, y, z
    except ValueError:
        print "I do not like this line", line
        continue

可以通过正则表达式传递每一行

import re

valid_pattern = re.compile('-?\d\.\d+,-?\d\.\d+,-?\d\.\d+')

for line in lines:
    if valid_pattern.match(line):
        x,y,z = map(float(line.split(","))
    else:
        pass #ignore the line, maybe print a warning whatever

可以通过正则表达式传递每一行

import re

valid_pattern = re.compile('-?\d\.\d+,-?\d\.\d+,-?\d\.\d+')

for line in lines:
    if valid_pattern.match(line):
        x,y,z = map(float(line.split(","))
    else:
        pass #ignore the line, maybe print a warning whatever

可以通过正则表达式传递每一行

import re

valid_pattern = re.compile('-?\d\.\d+,-?\d\.\d+,-?\d\.\d+')

for line in lines:
    if valid_pattern.match(line):
        x,y,z = map(float(line.split(","))
    else:
        pass #ignore the line, maybe print a warning whatever

可以通过正则表达式传递每一行

import re

valid_pattern = re.compile('-?\d\.\d+,-?\d\.\d+,-?\d\.\d+')

for line in lines:
    if valid_pattern.match(line):
        x,y,z = map(float(line.split(","))
    else:
        pass #ignore the line, maybe print a warning whatever


您甚至可以让正则表达式执行基本边界检查,例如,如果小数点前的数字只能是0或1,则使用
-?[01]\。\d+
这有什么作用?-\d\。\d+我假设您不熟悉一般的正则表达式,也不熟悉特定于python的语法。如果是前者,则正则表达式是一个字符串,带有特殊的(不同语言的)描述字符串可以匹配的模式。如果您不熟悉python语法,请参阅以获取完整描述,但我将描述我的regexp“-?\d\.\d+,-?\d\.\d+,-?\d\.\d+,-?\d\.\d+”。您可以看到“-?\d\。\d+”部分重复出现。每次重复描述一个浮点数。-?->可选减号(?表示前面的字符是可选的)\d->0到9之间的任意数字;\。表示一个句点(不带反斜杠,与任何单个字符匹配)\d+->一个或多个数字(0-9)(+表示前面的一个或多个字符)谢谢,我想我不熟悉正则表达式。我非常感谢您花时间来解释这一点。您甚至可以让正则表达式进行基本的边界检查,例如,如果小数点前的数字只能是0或1,则使用
-?[01]\。\d+
这有什么作用?-\d\。\d+我假设您不熟悉一般的正则表达式,也不熟悉特定于python的语法。如果是前者,则正则表达式是一个字符串,带有特殊的(不同语言的)描述字符串可以匹配的模式。如果您不熟悉python语法,请参阅以获取完整描述,但我将描述我的regexp“-?\d\.\d+,-?\d\.\d+,-?\d\.\d+,-?\d\.\d+”。您可以看到“-?\d\。\d+”部分重复出现。每次重复描述一个浮点数。-?->可选减号(?表示前面的字符是可选的)\d->0到9之间的任意数字;\。表示一个句点(不带反斜杠,与任何单个字符匹配)\d+->一个或多个数字(0-9)(+表示前面的一个或多个字符)谢谢,我想我不熟悉正则表达式。我非常感谢您花时间来解释这一点。您甚至可以让正则表达式进行基本的边界检查,例如,如果小数点前的数字只能是0或1,则使用
-?[01]\。\d+
这有什么作用?-\d\。\d+我假设您不熟悉一般的正则表达式,也不熟悉特定于python的语法。如果是前者,则正则表达式是一个字符串,带有特殊的(不同语言的)描述字符串可以匹配的模式。如果您不熟悉python语法,请参阅以获取完整描述,但我将描述我的regexp“-?\d\.\d+,-?\d\.\d+,-?\d\.\d+,-?\d\.\d+”。您可以看到“-?\d\。\d+”部分重复出现。每次重复描述一个浮点数。-?->可选减号(?表示前面的字符是可选的)\d->0到9之间的任意数字;\。表示一个句点(不带反斜杠,与任何单个字符匹配)\d+->一个或多个数字(0-9)(+表示前面的一个或多个字符)谢谢,我想我不熟悉正则表达式。我非常感谢您花时间来解释这一点。您甚至可以让正则表达式进行基本的边界检查,例如,如果小数点前的数字只能是0或1,则使用
-?[01]\。\d+
这有什么作用?-\d\。\d+我假设您不熟悉一般的正则表达式,也不熟悉特定于python的语法。如果是前者,则正则表达式是一个字符串,带有特殊的(不同语言的)描述字符串可以匹配的模式。如果您不熟悉python语法,请参阅以获取完整描述,但我将描述我的regexp“-?\d\.\d+,-?\d\.\d+,-?\d\.\d+,-?\d\.\d+”。您可以看到“-?\d\。\d+”部分重复出现。每次重复描述一个浮点数。-?->可选减号(?表示前面的字符是可选的)\d->0到9之间的任意数字;\。表示一个句点(不带反斜杠,与任何单个字符匹配)\d+->一个或多个数字(0-9)(+表示前面的一个或多个字符)谢谢,我想我不熟悉正则表达式。我真的很感谢你花时间来解释这一点。@LucasScott注意到,与正则表达式解决方案相比,这个简单的try-except解决方案更快。在Python中,这是一种非常常见的模式(允许代码保持简单、快速和可读性)。@LucasScott注意到,与常规exp相比