Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Python变量区分为str或int_Python_String_Int - Fatal编程技术网

将Python变量区分为str或int

将Python变量区分为str或int,python,string,int,Python,String,Int,我有一个文件,每行有3个值。这是一个相当随机的文件,这些值中的任何一个都可以是str或int George, 34s, Nikon 42, absent, Alan apple, 111, 41 marked, 15, never ... 因此,我在行中读取,并使用split获得第一个值: theFile = r"C:\... " tDC = open(theFile, "r") for theLine in tDC: a, b, c = theLine.spli

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

George, 34s, Nikon

42, absent, Alan

apple, 111, 41

marked, 15, never

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

theFile = r"C:\... "

tDC = open(theFile, "r")

for theLine in tDC:

        a, b, c = theLine.split(',')
到目前为止还不错

当我试图处理变量
a
时,我陷入了困境。如果它是str或int,我需要以不同的方式处理它。我尝试设置
a=int(a)
,但如果它是字符串(例如,“George”),则会出现错误。我尝试了
如果type(a)=int
如果isinstance(a,int)
,但都不起作用,因为所有值都以字符串形式输入

那么,我如何评估该值而不查看其指定的“类型”?具体来说,我想读取所有的
a
,并找到所有数字的最大值(它们是整数,但可能是大的——可能是六位数)


有没有一种方法可以读取行中的数字,使数字以数字形式输入,字符串以字符串形式输入,或者有没有一种方法可以在不查看类型的情况下计算值本身?

第一点是,您需要一些规则来告诉您哪些值是整数,哪些值不是整数。在一个包含像
32s
这样的数据集中,我不确定把任何可能是整数的东西都当作整数来对待是否有意义

但是,为了简单起见,让我们假设这是您想要的规则:任何可能是整数的都是。所以,
int(a)
已经非常接近了;唯一的问题是它可能会失败。你用它做什么

Python的设计宗旨是:请求原谅比请求允许更容易。尝试一些东西,然后处理它可能失败的事实。正如建议的那样,使用
try
语句:

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)

第一点是,您需要一些规则来告诉您哪些值是整数,哪些值不是整数。在一个包含像
32s
这样的数据集中,我不确定把任何可能是整数的东西都当作整数来对待是否有意义

但是,为了简单起见,让我们假设这是您想要的规则:任何可能是整数的都是。所以,
int(a)
已经非常接近了;唯一的问题是它可能会失败。你用它做什么

Python的设计宗旨是:请求原谅比请求允许更容易。尝试一些东西,然后处理它可能失败的事实。正如建议的那样,使用
try
语句:

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)
如果字符串中的所有字符都在字母表中,则isalpha()返回“True”

如果字符串中的所有字符都是数字,则isnumeric()返回“True”

所以,

很抱歉,我的回答很简单,我只是为了同一个问题来到这里,我找到了一种不同的方式,希望与您分享

isalpha()如果字符串中的所有字符都在字母表中,则返回“True”

如果字符串中的所有字符都是数字,则isnumeric()返回“True”

所以,

很抱歉我的回答,我只是为了同一个问题来到这里,我找到了一种不同的方式,希望与您分享以下内容:

def ret_var(my_var: int) -> int:
try:
    intvalue = int(my_var)
    return my_var
except ValueError:
    print("my_var not int!")
这:


您可以使用
try
/
except
块,使用
except
中的
ValueError
。如何知道某列
42
是表示int
42
还是表示字符串
“42”
?毕竟,具有字符串值的数据,如<代码> 32秒> <代码>也可能有字符串值,如<代码> 42”<代码>。作为一个旁注,您可能需要考虑使用<代码> CSV < /代码>库,而不是手动调用<代码>拆分< /代码>。我不知道您的数据来自何处,也不知道它们是什么意思,但如果您遇到一个像
“Smith,John”
这样的专栏,我也不会太惊讶,您的代码会将其视为两个专栏,而不是一个,这将很难修复,而使用
csv
它要么就可以工作,如果type(a)=int不测试是否相等,则只需设置一个方言参数来修复它。要测试相等性,请使用==(双相等)。单个=用于赋值。您可以使用
try
/
except
块,使用
except
中的
ValueError
。如何知道某列
42
是表示int
42
还是表示字符串
“42”
?毕竟,具有字符串值的数据,如<代码> 32秒> <代码>也可能有字符串值,如<代码> 42”<代码>。作为一个旁注,您可能需要考虑使用<代码> CSV < /代码>库,而不是手动调用<代码>拆分< /代码>。我不知道您的数据来自何处,也不知道它们是什么意思,但如果您遇到一个像
“Smith,John”
这样的专栏,我也不会太惊讶,您的代码会将其视为两个专栏,而不是一个,这将很难修复,而使用
csv
它要么就可以工作,如果type(a)=int不测试是否相等,则只需设置一个方言参数来修复它。要测试相等性,请使用==(双相等)。单个=用于赋值。@padraiccnningham:如果“这些值中的任何一个都可以是str或int,
float(A)
似乎不是个好主意。当然,如果想要的规则是“任何可以解释为浮点的东西都应该被解析为浮点,然后被截断”(或四舍五入或其他什么),那就不同了,但这似乎比“任何可以解释为int的东西都应该被解析为int”的可能性要小得多将引发
ValueError
并被跳过。“34s”也是如此,我们知道这是他的输入。因此,
“2+3*4”
“0xcab”
“两个”
“0”
“4/1”
,以及其他各种可以被视为整数表示的东西。如果您不明白整数浮点如何影响和,请在将所有内容转换为浮点后,尝试添加
123456789012134567890+1+-123456789012134567890
。@PadraicCunningham:谁在乎cuto有多大
def ret_var(my_var: int) -> int:
try:
    intvalue = int(my_var)
    return my_var
except ValueError:
    print("my_var not int!")