在python中检查函数参数的范围

在python中检查函数参数的范围,python,function,exception,arguments,Python,Function,Exception,Arguments,如何处理数值上有效但物理上超出范围的函数 原因是,我想让我的程序告诉我并停止,如果物理正确的范围是左 我考虑使用ValueError异常来处理此错误 例如: def return_approximation(T): #return T only if it is inbetween 0 < T < 100 return T def返回近似值(T): #仅当T介于0>f(0) >>>f(1) 1. 编辑:例外情况下的解决方案: >>> def f(T):

如何处理数值上有效但物理上超出范围的函数

原因是,我想让我的程序告诉我并停止,如果物理正确的范围是左

我考虑使用ValueError异常来处理此错误

例如:

def return_approximation(T):
  #return T only if it is inbetween 0 < T < 100
  return T
def返回近似值(T):
#仅当T介于0
Python为此类参数限制提供了
assert
-语句

def return_approximation(T):
    assert 0 < T < 100, "Argument 'T' out of range"
    return T
def返回近似值(T):
断言0
Python为此类参数限制提供了
assert
-语句

def return_approximation(T):
    assert 0 < T < 100, "Argument 'T' out of range"
    return T
def返回近似值(T):
断言0
我不确定你所说的
物理意义上的
是什么意思


一般来说,如果超出范围的错误是由外部数据引起的,则应该引发异常;如果错误来自您自己的数据,您可以使用
assert
中止当前执行。

我不确定您所说的
物理上是什么意思


一般来说,如果超出范围的错误是由外部数据引起的,则应该引发异常;如果错误来自您自己的数据,您可以使用
assert
中止当前执行。

您可以简单地将返回值限制为T(如果它与您的条件匹配),否则
不返回任何值
,如下所示:

>>> def f(T):
        return T if 0 < T < 100 else None

>>> f(100)
>>> f(99)
99
>>> f(0)
>>> f(1)
1
定义f(T): 如果0>>f(100) >>>f(99) 99 >>>f(0) >>>f(1) 1.
编辑:例外情况下的解决方案:

>>> def f(T):
        if 0 < T < 100:
            return T
        else:
            raise ValueError


>>> f(100)
Traceback (most recent call last):
  File "<pyshell#475>", line 1, in <module>
    f(100)
  File "<pyshell#474>", line 5, in f
    raise ValueError
ValueError
>>> f(99)
99
>>> f(0)
Traceback (most recent call last):
  File "<pyshell#477>", line 1, in <module>
    f(0)
  File "<pyshell#474>", line 5, in f
    raise ValueError
ValueError
>>> f(1)
1
定义f(T): 如果0>>f(100) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 f(100) 文件“”,第5行,在f中 升值误差 数值误差 >>>f(99) 99 >>>f(0) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 f(0) 文件“”,第5行,在f中 升值误差 数值误差 >>>f(1) 1.
为了更清晰,您甚至可以输出自己的信息:

>>> def f(T):
        if 0 < T < 100:
            return T
        else:
            raise Exception('T is out of Range')

>>> f(100)
Traceback (most recent call last):
  File "<pyshell#484>", line 1, in <module>
    f(100)
  File "<pyshell#483>", line 5, in f
    raise Exception('T is out of Range')
Exception: T is out of Range
定义f(T): 如果0>>f(100) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 f(100) 文件“”,第5行,在f中 引发异常(“T超出范围”) 例外:T超出范围
您可以简单地将返回值限制为T(如果它与您的条件匹配),否则
将返回None
,如下所示:

>>> def f(T):
        return T if 0 < T < 100 else None

>>> f(100)
>>> f(99)
99
>>> f(0)
>>> f(1)
1
定义f(T): 如果0>>f(100) >>>f(99) 99 >>>f(0) >>>f(1) 1. 编辑:例外情况下的解决方案:

>>> def f(T):
        if 0 < T < 100:
            return T
        else:
            raise ValueError


>>> f(100)
Traceback (most recent call last):
  File "<pyshell#475>", line 1, in <module>
    f(100)
  File "<pyshell#474>", line 5, in f
    raise ValueError
ValueError
>>> f(99)
99
>>> f(0)
Traceback (most recent call last):
  File "<pyshell#477>", line 1, in <module>
    f(0)
  File "<pyshell#474>", line 5, in f
    raise ValueError
ValueError
>>> f(1)
1
定义f(T): 如果0>>f(100) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 f(100) 文件“”,第5行,在f中 升值误差 数值误差 >>>f(99) 99 >>>f(0) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 f(0) 文件“”,第5行,在f中 升值误差 数值误差 >>>f(1) 1. 为了更清晰,您甚至可以输出自己的信息:

>>> def f(T):
        if 0 < T < 100:
            return T
        else:
            raise Exception('T is out of Range')

>>> f(100)
Traceback (most recent call last):
  File "<pyshell#484>", line 1, in <module>
    f(100)
  File "<pyshell#483>", line 5, in f
    raise Exception('T is out of Range')
Exception: T is out of Range
定义f(T): 如果0>>f(100) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 f(100) 文件“”,第5行,在f中 引发异常(“T超出范围”) 例外:T超出范围
您应该引发一个名为ValueError的异常

if 0 < T < 100:
    raise ValueError('T must be in the exclusive range (0,100)')
如果0
您应该引发一个名为ValueError的异常

if 0 < T < 100:
    raise ValueError('T must be in the exclusive range (0,100)')
如果0
如果T小于零或大于100,则引发自定义异常?那么我们如何提供帮助?物理上超出范围的
和数值上有效的
是什么意思。提供一些示例,也要更具体一些。这是
断言
-语句的用例。如果T小于零或大于100,则引发自定义异常?那么我们如何提供帮助?物理上超出范围
和数值上有效的
是什么意思。请提供一些示例,并且更具体一些。这是
assert
-statement的用例。您能否详细说明在这种情况下None的用法。例如,程序的预期行为。返回None以指示特殊含义的函数容易出错,因为None和其他值(例如零、空字符串)在条件表达式中的计算结果都为False。因此,它可能不太容易出现文档错误和引发异常。但在这种特殊情况下,似乎没有一个不会导致任何问题。@tarashypka,正确,但这取决于应用程序,它可以作为返回条件来决定下一步,我不清楚OP要求是返回要测试的内容还是引发异常,但是我也准备在上面添加一些东西。@marou,第一个函数,如果T在0到100之间,则返回T的值,否则它将返回
None
,第二个函数,如果T不在0到100之间,则最终将引发异常。您能详细说明在这种情况下None的用法吗。例如,程序的预期行为。返回None以指示特殊含义的函数容易出错,因为None和其他值(例如零、空字符串)在条件表达式中的计算结果都为False。因此,它可能不太容易出现文档错误和引发异常。但在这种特殊情况下,似乎没有一个不会导致任何问题。@tarashypka,正确,但这取决于应用程序,它可以作为返回条件来决定下一步,我不清楚OP要求是返回要测试的内容还是引发异常,但我也准备在这上面加些东西。@marou,fi