【问题标题】:How can I use the Except Exception in Python?如何在 Python 中使用异常异常?
【发布时间】:2013-01-05 17:16:10
【问题描述】:

我需要编写一个不会给我错误的代码,例如,我想要一个打印再试一次。

我学习其他主题,但我对此一无所知。 我有这个代码:

def conversor(anosluz):
    try:
        km = float(anosluz * (9.459 * 10**12)) 
        return km
    except Exception, e:
        print 'Ooops! O valor que inseriste nao e o correcto, tenta de novo.', e


if __name__=='__main__':
    anosluz = input('Insira a distancia em anos luz: ')
    resultado = conversor(anosluz)
    print resultado

【问题讨论】:

  • 哪一部分你不明白?这段代码似乎已经可以工作了。
  • 但是不行!我想要这样,当我输入例如“2..0”时,然后将我想要的内容打印为错误...

标签: python exception printing except


【解决方案1】:

首先你必须在 python2 中使用input。 如果你想获得一个整数使用int(raw_input()),否则使用float(raw_input())input 确实将字符串转换为它执行代码的数字,因此您在使用它的程序的安全性中制造了一个巨大的漏洞。

另一个你可以用来获取python内置数据类型作为输入的函数是ast.literal_eval

其次,你可以使用一些循环:

result = None
while True:
    num = raw_input("Insert number: ")
    try:
        result = float(num) * (9.459 * 10**12)
    except Exception:
        print "Try again!"
    else:
        break
print "The result is: ", result

基本上tryexcept 语句会阻止异常并让您处理它。 在您的情况下,您想重复输入请求,因此您应该将输入请求放入处理错误的循环中,并让 converser 函数引发异常。

【讨论】:

    【解决方案2】:

    将您的代码分为输入/输出和计算:

    def conversor(anosluz):
        # just convert the given anosluz into km
        km = anosluz * (9.459 * 10**12) 
        return km
    
    
    if __name__=='__main__':
        while True:
            # repeat until *break*
            anosluz = raw_input('Insira a distancia em anos luz: ')
            try:
                resultado = conversor(float(anosluz))
            except ValueError, e:
                # oh, conversor raised an exception
                print 'Ooops! O valor que inseriste nao e o correcto, tenta de novo.', e
            else:
                # no exception, print result and exit
                print resultado
                break
    

    【讨论】:

      猜你喜欢
      • 2021-09-16
      • 2021-01-20
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 2016-12-13
      • 2010-12-01
      相关资源
      最近更新 更多