python - 解决 UnboundLocalError 的任何其他建议:分配前引用的局部变量 'val'
问题描述
我得到一个 UnboundLocalError: 在我的 if 语句中使用 NaN 时。如果我将 NaN 设置为 0,那么代码可以正常工作。但是代码需要使用 NaN 而不是 0。
我已经阅读了有关 UnboundLocalError: 的大部分主题:但我没有找到我想要的东西。
import math
from math import nan as NaN
def interest(A, P, R, N):
if R == NaN:
val = (A/P)**(1/float(N))-1
elif P == NaN:
val = A/(1+R)**N
elif A == NaN:
val = P * (1 + R)**N
elif N == NaN:
val = (math.log(A)- math.log(P))/ math.log(1+R)
return val
print(interest(1000, 200, NaN, 5))
解决方案
正如其他人在评论中提到的那样,您的代码缺少处理没有条件评估为的情况的逻辑True
。
还math.nan == math.nan
评估为,False
因此您的函数调用将永远不会导致任何if
语句True
因此val
永远不会被初始化,这就是您得到UnboundLocalError
.
有一个else
子句应该返回一些适当的值或只是None
.
最后比较nan
tonan
对我来说似乎是多余的,因为在您的函数调用中传递的第三个参数是NaN
.
这只是对您的代码的轻微修改,它可以工作。
import math
from math import nan
def interest(A, P, R, N):
if R is nan:
val = (A / P) ** (1 / float(N)) - 1
elif P is nan:
val = A / (1 + R) ** N
elif A is nan:
val = P * (1 + R) ** N
elif N is nan:
val = (math.log(A) - math.log(P)) / math.log(1 + R)
else:
val = None
return val
print(interest(1000, 200, 'test', 5))
推荐阅读
- eclipse - com.sun.xml.bind:jaxb-core:jar:2.2.11 的 POM 无效,传递依赖项(如果有)将不可用
- javascript - 灯箱隐形控件
- mysql - MySQL 试图在 WITH 语句期间使用当前模式
- google-sheets - Google 表格中 =IMPORTXML 的公式解析错误
- python - 为 Python API 速率限制器编写单元测试(TDD 方法)
- python - Python中存储过程绑定中的输出参数
- c - 断开节点并将它们链接到另一个链表的功能?
- unit-testing - K8s 测试:在方案中没有为 v1alpha1.JivaVolume 类型注册类型
- c# - 如何在本地 IdentityContext 中注册从外部身份验证提供程序获得的用户
- typescript - 为什么添加 `& string` 会修复/提高 `keyof` 的智能感知?