Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.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 ValueError:基数为10的int()的文本无效_Python - Fatal编程技术网

Python ValueError:基数为10的int()的文本无效

Python ValueError:基数为10的int()的文本无效,python,Python,我制作了一个程序,用户在其中输入一个数字,该程序将计算该数字并显示所花的时间。然而,每当我输入字母或小数(即0.5),我就会得到一个错误。以下是完整的错误消息: Traceback (most recent call last): File "C:\Documents and Settings\Username\Desktop\test6.py", line 5, in <module> z = int(z) ValueError: invalid literal for

我制作了一个程序,用户在其中输入一个数字,该程序将计算该数字并显示所花的时间。然而,每当我输入字母或小数(即0.5),我就会得到一个错误。以下是完整的错误消息:

Traceback (most recent call last):
  File "C:\Documents and Settings\Username\Desktop\test6.py", line 5, in <module>
    z = int(z)
ValueError: invalid literal for int() with base 10: 'df'
回溯(最近一次呼叫最后一次):
文件“C:\Documents and Settings\Username\Desktop\test6.py”,第5行,在
z=int(z)
ValueError:基数为10的int()的文本无效:“df”
我能做些什么来解决这个问题

以下是完整的代码:

import time
x = 0
print("This program will count up to a number you choose.")
z = input("Enter a number.\n")
z = int(z)
start_time = time.time()
while x < z:
    x = x + 1
    print(x)
end_time = time.time()
diff = end_time - start_time
print("That took",(diff),"seconds.")
导入时间
x=0
打印(“此程序将按您选择的数字计数。”)
z=输入(“输入一个数字。\n”)
z=int(z)
开始时间=time.time()
当x
请帮忙

试试看

if string.isdigit(z):
然后执行代码的其余部分(如果是数字)

因为您以1的间隔计数,所以使用int()应该很好,因为您不需要小数

编辑:如果您希望捕获异常,而不是像wooble建议的那样,下面是代码:

try: 
    int(z)
    do something
except ValueError:
    do something else

嗯,有一种方法可以“修复”这个问题,它的行为和预期的一样——不能将字母大小写为int,这是没有意义的。你最好的选择(这是一种类似python的方法)是简单地编写一个函数,然后再试一次。。。除区块外:

def get_user_number():
    i = input("Enter a number.\n")
    try:
        # This will return the equivalent of calling 'int' directly, but it
        # will also allow for floats.
        return int(float(i)) 
    except:
        #Tell the user that something went wrong
        print("I didn't recognize {0} as a number".format(i))
        #recursion until you get a real number
        return get_user_number()
然后,您将替换这些行:

z = input("Enter a number.\n")
z = int(z)


预期的行为是什么?输入中的
z
应该包含的是“df”或“0.5”而不是数字?只捕获异常更符合pythonic。此外,如果可以,您应该等待
执行某项操作
,直到执行
try except
块之后。这样,您就不太可能捕捉到一些不相关的错误。string.isdigit与Python3.x不兼容
z。isdigit()
是Python3吗@胡闹不一定,不要武断。在这种情况下,什么更容易做?我认为1行检查胜过2-3行尝试/捕获为什么在失败时递归调用自己?这是非常低效的。@Jeff虽然Python没有针对尾部递归进行优化,但至少必须对用户有一些信任——我们需要假设,在第二次或第三次被告知他们搞砸了时,他们会得到消息。看看它,我想我可以把它放在一个
中,而True:
中,但对我来说,这读起来更明确。
z = get_user_number()