关于string:将Python变量区分为str或int

Differentiating Python variables as str or int

我有一个文件,每行有3个值。它是一个相当随机的文件,这些值中的任何一个都可以是str或int。

1
2
3
4
5
6
7
8
9
George, 34s, Nikon

42, absent, Alan

apple, 111, 41

marked, 15, never

...

因此,我在行中读取,并使用split获得第一个值:

1
2
3
4
5
6
7
theFile = r"C:\..."

tDC = open(theFile,"r")

for theLine in tDC:

        a, b, c = theLine.split(',')

到现在为止,一直都还不错。

当我试图处理变量a时,我陷入了困境。如果它是str或者int,我需要用不同的方法来处理它。我尝试设置a = int(a),但是如果它是一个字符串(例如"george"),那么我会得到一个错误。我试过if type(a) = intif isinstance(a,int),但都不起作用,因为所有的值都是字符串!

那么,如何评估不看其分配的"类型"的值呢?具体地说,我想读取所有的a,并找到所有数字的最大值(它们是整数,但可能是大的——也许是六位数)。

是否有一种方法可以读取行中的数据,以便数字和字符串以字符串形式出现,或者可能有一种方法可以在不查看类型的情况下评估值本身?


第一点是,您需要一些规则来告诉您哪些值是整数,哪些值不是整数。在包含32s等内容的数据集中,我不确定是否将任何可能是整数的内容视为整数是有意义的。

但是,为了简单起见,我们假设这是您想要的规则:任何可以是整数的东西都是。因此,int(a)已经相当接近了;唯一的问题是它可能会失败。你怎么处理这个?

python是围绕EAFP设计的:请求原谅比请求允许更容易。尝试一些东西,然后处理它可能失败的事实。正如赛博建议的那样,在try声明中:

1
2
3
4
5
6
7
8
try:
    intvalue = int(a)
except ValueError:
    # Oops, it wasn't an int, and that's fine
    pass
else:
    # It was an int, and now we have the int value
    maxvalue = max(maxvalue, intvalue)


1
2
3
4
5
6
7
values = theLine.split(',')
for value in values:
    try:
        number = int(value)
        # process as number
    except ValueError:
        # process value as string