【问题标题】:Try except statement python尝试除语句python
【发布时间】:2014-03-20 03:29:15
【问题描述】:

我只是想更好地理解 Try 和 except 语句。我被卡住了。所以我希望你们能澄清一下。这个程序纯粹是为了学习。

感谢您的意见。

while True:
    x=int(input('enter no.->'))

    try:
        x/2
    except ValueError:
        print('try again')
    else:
        if (x/2)==1:
            break
print('program end')

所以我是故意写这个程序的-

  1. 如果 x 是数字则循环
  2. 如果不是。然后'except'开始发挥作用并重新开始
  3. 如果商为 1。停止。

就算我改成

    x=input('enter no.->')

    try:
        int(x)/2

'except' 有效,但如果我输入一个数字,我会得到'不支持的操作数类型'。

【问题讨论】:

    标签: python try-catch except


    【解决方案1】:

    您正在尝试立即将其转换为 int。 try-except 语句将检查错误,但仅限于 try-except thingy 中包含的代码。如果输入错误,int 转换将立即失败,因为输入的不是整数。 相反,将 int 转换 (int(string)) 放入 try-except 语句中:

    while True:
        x=input('enter no.->')
    
    
        try:
            x=int(x)
        except ValueError:
            print('try again')
        else:
            if (x/2)==1:
                break
    print('program end')
    

    第二个失败了,因为您必须将 x 设置为转换后的值,所以您基本上是在尝试将字符串除以 2。

    作为说明,我不确定这有多适用,但我的 OOP 教授告诉我使用无限循环并打破/返回它是非常糟糕的编程习惯,所以你应该只使用布尔值 (而 foo: ... ... ... foo = false)。我不完全确定为什么,因为我还没有查过。

    编辑:Is it a bad practice to use break in a for loop?

    一般来说,这就是您愿意让它成为可读性或容易出错的程度。

    【讨论】:

    • 很好的解释!很有用。就2个问题。在 'TRY' 块中写 x=int(x) 与 x=int(x)/2 应该是一样的,因为无论如何你不能用 2 来划分字符串,所以它会给出一个 ValueError。?以及为什么我必须将 x 的值设置为 int 类型?我不能只检查 int(x) 吗?
    • 如果 x 没有设置为 int 类型,python 将其视为一个单词。想象一下将一个单词除以 2!那怎么做? int(string) 函数将字符串转换为整数。 TRY 块中的 x=int(x)/2 应该工作相同,除非它有效,你的新 x 已经被 2 除,所以如果你把 x=int(x)/2 放在 TRY 块中,你将不得不删除 if 语句中的 x/2 检查(而不是:“如果 x==1:”),因为 x 已经被 2 除。如果它不起作用,它确实会给你一个 ValueError。
    • 哦,是的.. 明白了。谢谢!
    【解决方案2】:

    要在 x 是数字时循环,您可以执行以下操作(使用 Try 和 except):

    num = True
    while num:
       x = raw_input("Enter a number: ")
       try:
           y = int(x)/2
           num = True
       except:
           num = False
    
    print "Done!"
    

    【讨论】:

    • @dma1234 关于编码实践是正确的。此外,您真的不需要担心商是什么,因为尝试将非数字字符串转换为整数总是会给您一个错误。如果你只是想练习 try-except,你甚至可以取消除法。
    • 我正在尝试使用复杂的语句进行练习(根据堆栈溢出标准,显然不是那么复杂),但仍在尝试。
    猜你喜欢
    • 2016-10-02
    • 2011-04-18
    • 1970-01-01
    • 2018-02-28
    • 2011-02-01
    • 2022-11-03
    • 2022-01-12
    • 1970-01-01
    • 2012-02-25
    相关资源
    最近更新 更多