Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.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模类型错误_Python_Python 2.7 - Fatal编程技术网

Python模类型错误

Python模类型错误,python,python-2.7,Python,Python 2.7,我想创建简单的代码来测试数字是奇数还是偶数。 我使用的是python2.7.3 def oddoreven(a): try: int(a) except: return "Error" if a%2==0: return 1 else: return 0 相反,代码失败,出现错误:TypeError:在字符串格式化过程中未转换所有参数。如果%2==0…,则错误指向以开头的行。 在研究这个问题时,我发现了一些例子,表明这样的代码应该可以工作。例如,此问题的答案提供

我想创建简单的代码来测试数字是奇数还是偶数。 我使用的是
python2.7.3

def oddoreven(a):
    try: int(a)
    except: return "Error"
    if a%2==0: return 1
    else: return 0
相反,代码失败,出现错误:
TypeError:在字符串格式化过程中未转换所有参数。
如果%2==0…,则错误指向以
开头的行。

在研究这个问题时,我发现了一些例子,表明这样的代码应该可以工作。例如,此问题的答案提供了与解决方案类似的代码:

那么,我的代码有什么问题吗?

如用户2357112所述。(int)a不会将a转换为int。因此,当您检查其模数时,仍然必须将其转换

def oddoreven(a):
    try: int(a)
    except: return "Error"
    if int(a)%2==0: return 1
    else: return 0

print oddoreven(32)
很好

作为旁注,捕获任何异常通常都是不受欢迎的。您可能希望缩小范围,如:

def oddoreven(a):
    try: int(a)
    except TypeError: return "Error"
    if int(a)%2==0: return 1
    else: return 0

print oddoreven(32)
如用户2357112所述。(int)a不会将a转换为int。因此,当您检查其模数时,仍然必须将其转换

def oddoreven(a):
    try: int(a)
    except: return "Error"
    if int(a)%2==0: return 1
    else: return 0

print oddoreven(32)
很好

作为旁注,捕获任何异常通常都是不受欢迎的。您可能希望缩小范围,如:

def oddoreven(a):
    try: int(a)
    except TypeError: return "Error"
    if int(a)%2==0: return 1
    else: return 0

print oddoreven(32)

int
功能不会更改
a
的位置,您需要将其分配给
a

>>> def oddoreven(a):
...     try: a=int(a)
...     except: return "Error"
...     if a%2==0: return 1
...     else: return 0 
... 
>>> oddoreven('2')
1
>>> oddoreven('5')
0
>>> oddoreven('a')
'Error'

int
功能不会更改
a
的位置,您需要将其分配给
a

>>> def oddoreven(a):
...     try: a=int(a)
...     except: return "Error"
...     if a%2==0: return 1
...     else: return 0 
... 
>>> oddoreven('2')
1
>>> oddoreven('5')
0
>>> oddoreven('a')
'Error'

这是因为您首先测试
a
是否可以转换为
int
(这很好),然后忽略此测试并继续使用参数中提供的
字符串

Python是一种动态类型语言,但也是强类型,这意味着您可以在声明变量后更改其类型,但此更改必须是显式的()

在您的情况下,如果%2==0
如果
a
是字符串,则表示您不能执行

您可以这样做,例如:

def oddoreven(a):
    try:
        my_int = int(a)
    except TypeError:
        return "The argument provided could not be converted into an int"
    if my_int % 2 == 0:
        return 1
    else:
        return 0

这是因为您首先测试
a
是否可以转换为
int
(这很好),然后忽略此测试并继续使用参数中提供的
字符串

Python是一种动态类型语言,但也是强类型,这意味着您可以在声明变量后更改其类型,但此更改必须是显式的()

在您的情况下,如果%2==0
如果
a
是字符串,则表示您不能执行

您可以这样做,例如:

def oddoreven(a):
    try:
        my_int = int(a)
    except TypeError:
        return "The argument provided could not be converted into an int"
    if my_int % 2 == 0:
        return 1
    else:
        return 0
int(a)
a
没有任何作用
int(a)
a
没有任何作用。