Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.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 为什么int(string)给出值错误_Python_Typeerror - Fatal编程技术网

Python 为什么int(string)给出值错误

Python 为什么int(string)给出值错误,python,typeerror,Python,Typeerror,我只是想知道为什么当我使用int('string')这样的字符串的整数时,为什么在Python3.2中会收到一个值错误,而不是一个类型错误。我看到python站点上对类型错误的定义如下:当操作或函数应用于不适当类型的对象时引发。关联的值是一个字符串,提供有关类型不匹配的详细信息 int不是运算符,字符串是不合适的类型吗?当我这样做时,我收到一个ValueError,并且不理解其原因 这是密码 因此,当我用一个列组实例化这个类,该列组中有一个字符串要尝试并故意获取一个错误时,我会收到一个value

我只是想知道为什么当我使用int('string')这样的字符串的整数时,为什么在Python3.2中会收到一个值错误,而不是一个类型错误。我看到python站点上对类型错误的定义如下:当操作或函数应用于不适当类型的对象时引发。关联的值是一个字符串,提供有关类型不匹配的详细信息

int不是运算符,字符串是不合适的类型吗?当我这样做时,我收到一个ValueError,并且不理解其原因

这是密码 因此,当我用一个列组实例化这个类,该列组中有一个字符串要尝试并故意获取一个错误时,我会收到一个valueerror,而不是我所期望的类型

class Card:

#attributes
list_rank=   ["","Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"]
list_suit={"d":"diamonds","c":"clubs","h":"hearts","s":"spades"}

#initialize rank and suit
def __init__(self,rank,suit):



self.rank=int(rank)

self.suit=suit




#return the rank of the card
def getRank(self):
    return(self.list_rank[self.rank])

#return the suit of the card
def getSuit(self):
    return(self.list_suit[self.suit])



#value of the cards
def bjValue(self):
    if(self.rank<10):
        return(self.rank)
    else:
        return(10)


#return the rank and suit of the card
def __str__(self):

    return (self.list_rank[self.rank]+" of "+self.list_suit[self.suit])
类卡:
#属性
排名=[,“A”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”,“10”,“杰克”,“女王”,“国王”]
清单(d):"钻石","c"梅花","h"红心","s"黑桃"}
#初始化等级和诉讼
定义初始(自我、等级、套装):
self.rank=int(秩)
西服
#返回卡的等级
def getRank(自我):
返回(self.list\u秩[self.rank])
#把卡片的套装退回来
def getSuit(自我):
返回(self.list\u suit[self.suit])
#卡的价值
定义值(自身):

如果(self.rank因为
int()
接受字符串作为参数,例如
int('1')
将输出
1
。因此
'1'
是一个合适的值,但
'a'

要理解类型和值之间的差异,您必须理解类型和值之间的差异是字符串,您可以通过运行

type("abc")  # -> string
文本“abc”
的值只是值本身。如果您有一个类似
“ab”+“c”
的表达式,那么该值也将是
“abc”

这就是为什么你得到的是
ValueError
而不是
TypeError
int
需要一个
字符串,你给了它-所以它是正确的类型-但是
值必须是可以解释为整数的东西,
显然“abc”
不是整数

要尝试此方法,请参见以下内容之间的区别:

int('abc')
# throws:
# ValueError: invalid literal for int() with base 10: 'abc'

“abc”
看起来并不是一个整数,但这一事实并不能阻止我们将其解释为一。在另一种情况下,它仍然可以解释为一个数字

例如:您可能知道,二进制数只使用
0
s和
1
s,十六进制数通常使用数字
0
-
9
和字母
a
-
f
表示。函数采用可选参数,告诉它使用哪个基,因此如果我们尝试解释de>“abc”
但作为十六进制数,我们得到:

int('abc',  base=16)
# returns 2748

TL;DR:如果您提供的数据是您试图使用的函数的正确类型,但是值没有意义,那么您会得到一个
值错误。
如果您试图使用的函数不理解如何处理您提供的数据类型,则会出现
TypeError

示例:

例如:

int('123') 
>>>>123

int('somestring')
>>>>Traceback (most recent call last):
    File "<interactive input>", line 1, in <module>
    ValueError: invalid literal for int() with base 10: 'somestring'

每个字符都有一个称为ASCII的整数,你知道吗?值得一提的是,Python 2.x也会引发一个
ValueError
。你真的将这个函数应用于任何东西吗?
int
不是运算符,它是一个内置类。当你调用
int(x)时
您正在调用该类的构造函数。请注意,
'string'
是以36为基数的有效数字,即
int('string',base=36)
的计算结果为
1743045676
(十进制)。;-)@user3630439关键是将字符串传递给
int
构造函数不是类型错误-许多字符串都是有效的(例如
“12345”
)。因此为字符串引发类型错误是没有意义的(但为例如
None
引发类型错误是完全合理的,正如AndréLaszlo所演示的)。因为我刚才说的
'a'
是一个错误的值,因为它不是整数,但
'1'
是一个可接受的值。请记住,两者都有相同的类型啊,这很有意义。非常感谢!非常感谢。现在这更有意义了。我想我不是真的在想。再次感谢。非常感谢您的解释!非常感谢!
int('123') 
>>>>123

int('somestring')
>>>>Traceback (most recent call last):
    File "<interactive input>", line 1, in <module>
    ValueError: invalid literal for int() with base 10: 'somestring'
>>>>int('FF', base=16)  #hexadecimal
255

>>>>int('9', base=8) # can only use 0-7 in octal
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'somestring'


>>>>int('somestring', base=36)
2913141654103084L
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
TypeError: int() argument must be a string or a number, not 'dict'