如果结果有效但不需要,那么在python中尝试失败的更好方法

如果结果有效但不需要,那么在python中尝试失败的更好方法,python,string,python-2.7,Python,String,Python 2.7,如果您在python中进行了一次尝试,并且代码没有失败,但超出了您想要的范围或其他内容,那么什么是使代码失败的最佳方法,从而使其进入“例外” 下面是一个简单的示例,检查输入是否为0到1之间的数字: input = 0.2 try: if 0 < float( input ) < 1: print "Valid input" else: "fail"+0 (to make the code go to except) except:

如果您在python中进行了一次尝试,并且代码没有失败,但超出了您想要的范围或其他内容,那么什么是使代码失败的最佳方法,从而使其进入“例外”

下面是一个简单的示例,检查输入是否为0到1之间的数字:

input = 0.2
try:
    if 0 < float( input ) < 1:
        print "Valid input"
    else:
        "fail"+0  (to make the code go to except)
except:
    print "Invalid input"
input=0.2
尝试:
如果0

有没有更好的办法?between范围只是一个示例,因此它也应该适用于其他内容(同样,在上面的示例中,它还应该能够使用字符串格式的数字,因此检测类型不会真正起作用)。

内置的断言机制可能适合这里

input = 0.2
try:
    assert 0 < float( input ) < 1
    print "Valid input"
except (AssertionError, ValueError):
    print "Invalid input"
input=0.2
尝试:
断言0

如果您提供给
assert
语句的条件的计算结果不是
True
,则将引发
AssertionError
。此外,在尝试对无效值进行
浮点
转换时,会引发
值错误

内置断言机制可能适合这里

input = 0.2
try:
    assert 0 < float( input ) < 1
    print "Valid input"
except (AssertionError, ValueError):
    print "Invalid input"
input=0.2
尝试:
断言0

如果您提供给
assert
语句的条件的计算结果不是
True
,则将引发
AssertionError
。此外,在尝试对无效值进行
浮点
转换时,会引发
值错误

,您可以使用
raise
语句:

try:
    if (some condition):
        Exception
except:
    ...
请注意,
异常
可以更具体,例如,
值错误
,也可以是您定义的异常:

class MyException(Exception):
    pass

try:
    if (some condition):
        raise MyException
except MyException:
    ...

您可以使用
raise
语句:

try:
    if (some condition):
        Exception
except:
    ...
请注意,
异常
可以更具体,例如,
值错误
,也可以是您定义的异常:

class MyException(Exception):
    pass

try:
    if (some condition):
        raise MyException
except MyException:
    ...

另一个答案是准确的。但为了让您更多地了解异常处理。。。你可以用

也考虑他的评论:他说:

如果输入既不是字符串也不是数字,您还希望捕获TypeError

因此,在这种情况下,我们可以添加除块之外的其他块

input = 1.2
try:
    if 0 < float( input ) < 1:
        print "Valid input"
    else:
        raise ValueError  #(to make the code go to except)
except ValueError:
    print "Input Out of Range"
except TypeError:
    print "Input NaN"
input=1.2
尝试:
如果0

TypeError
如果输入是对象(例如)

则会引发另一个答案是准确的。但为了让您更多地了解异常处理。。。你可以用

也考虑他的评论:他说:

如果输入既不是字符串也不是数字,您还希望捕获TypeError

因此,在这种情况下,我们可以添加除块之外的其他块

input = 1.2
try:
    if 0 < float( input ) < 1:
        print "Valid input"
    else:
        raise ValueError  #(to make the code go to except)
except ValueError:
    print "Input Out of Range"
except TypeError:
    print "Input NaN"
input=1.2
尝试:
如果0

TypeError
将在输入为对象时引发(例如)

抱歉,但rchang的答案对于生产代码不可靠(如果Python使用-O标志运行,则跳过断言语句)。正确的解决方案是引发
值错误
,即:

try:
    if 0 < float(input) < 1:
        raise ValueError("invalid input value")
    print "Valid input"
except (TypeError, ValueError):
    print "Invalid input"
试试看:
如果0
很抱歉,对于生产代码,rchang的回答不可靠(如果Python使用-O标志运行,则跳过断言语句)。正确的解决方案是引发
值错误
,即:

try:
    if 0 < float(input) < 1:
        raise ValueError("invalid input value")
    print "Valid input"
except (TypeError, ValueError):
    print "Invalid input"
试试看:
如果0
啊,谢谢,它完成了我所追求的,但assert方法似乎与我所使用的东西配合得更好:)@Peter:“assert方法”不可靠,如果用“-O”标志编译(或执行)代码,它会崩溃。啊,谢谢,它完成了我所追求的,但是assert方法似乎更适合我使用它的东西:)@Peter:“assert方法”不可靠,如果代码是用“-O”标志编译(或执行)的,它会崩溃。谢谢,虽然公平地说,assert方法似乎更易于使用,避免了额外的if语句:)啊,好吧,哈哈,我还以为你指的是基督教徒呢:P但是,是的,谢谢你,除了基础知识之外,我对异常知之甚少,所以任何帮助都是有用的:)请不要使用bare exception子句-始终指定你要处理的异常。@Brunodesshuilliers是的。OP用了这么多。。。现在将进行编辑。感谢您还想捕获
TypeError
,以防
input
既不是字符串也不是数字。感谢,虽然为了公平起见,assert方法的使用似乎更简洁,避免了额外的if语句:)啊,好吧,哈哈,我想您当时指的是基督徒:P但无论如何,是的,谢谢,除了基础知识外,我对异常了解不多,所以任何帮助都很有用:)请不要使用bare exception子句-始终指定要处理的异常。@Brunodesshuilliers是的。OP用了这么多。。。现在将进行编辑。谢谢,如果
输入既不是字符串也不是数字,你还想捕获
类型错误
。谢谢,哈哈,我所追求的似乎很完美,我以前没听说过assert,但它似乎真的很有用。
assert
语句在.pyo文件中被禁用,断言只用于调试和测试目的,不用于实际的应用程序逻辑。