当您说“您无法更改代码中的变量”时,我不清楚您的意思。老实说,我将在这里迈出一大步(因为我不知道你对 Python 的理解程度)。
有两个概念我觉得你可能会遇到麻烦。(1)是对象可变性的概念,以及(2)如何在 Python 内部和外部范围内使用和定义变量。
当您重新分配这样的值时:
n = int(n)
testingNum
您实际上并没有修改 ( )之外的变量所持有的值。这是因为 Python 中的变量只是对对象的引用。这意味着您的变量将始终指向同一个对象,除非它被明确地重新分配。当您处理可变性的概念时,这会变得令人困惑。例如,列表、字典和类都是可变对象。如果您执行以下操作:
t = []
n = t
然后做:
n.extend([1,2,3,4])
你会看到两者n
,t
现在看起来像:
[1,2,3,4]
当您最终了解发生了什么时,这并不是真正神秘的行为。整数4
和[1,2,3,4]
是不同的对象。唯一的区别是当它被分配给 时,它也是[1,2,3,4]
与初始对象相同的对象。另一方面,当您将整数或字符串重新分配给变量时,您只是更改了变量指向的对象。就这样。[]
t
这如何适用于您的示例?
本质上,您所缺少的只是一个return
声明:
def errorCheckInt(n):
try:
n = int(n)
checkValue1 = True
except:
checkValue1 = False
return n
testingNum = "2"
newNum = errorCheckInt(testingNum) # You can catch it here with newNum.
了解return语句的使用无异于。当您在函数内分配对变量的引用时,该变量会在您退出函数后立即超出范围;换句话说,如果你尝试在之后调用它,你会得到一个错误。为了避免这种情况,您需要在外部范围内的变量中捕获函数的结果。这使您可以继续使用刚刚在函数内计算的数据。
笔记
做你要求的更好的方法是使用isinstance
. 例如,
print isinstance(4, int)
# True
print isinstance('4', int)
# False
这将自动检查该值是否是该int
类型的实例。它更清晰,更干净。
进一步澄清
可变性的一个有趣事实是,当您在函数内部传递对可变对象的引用时,修改该对象[].append(4)
意味着任何指向该对象的变量(即使是从外部)都将获得相同的更新,如果您愿意的话。因此,在某些情况下,没有必要使用return语句,但明确的有时是值得的。