Python 类型错误:必须是字符串,不能是整数。

3

我有一个非常简单的脚本,其中我正在执行4个其他脚本。

第17行抛出了这个错误:TypeError:必须是字符串,而不是整数

这是完整的第17行:

execfile(c)

它能够顺利执行前两个脚本 (a & b),但在 c 上失败了。如果我将前两行脚本注释掉,它就能够成功运行第17行。

有什么想法吗?

整个脚本:

import datetime

today = str(datetime.datetime.today().strftime('%Y-%m-%d %H:%M'))

a = r'\\server\Scheduled_Scripts\PowerBI_part1.py'
b = r'\\server\Scheduled_Scripts\PowerBI_part2.py'
c = r'\\server\Scheduled_Scripts\PowerBI_part3.py'
d = r'\\server\Scheduled_Scripts\PowerBI_part4.py'

print "Starting at " + today

print "Executing part 1..."
execfile(a)
print "Executing part 2..."
execfile(b)
print "Executing part 3..."
execfile(c)
print "Executing part 4..."
execfile(d)

print "Complete at " + today

6
看起来是ab正在覆盖您的c - Aran-Fey
能否提供脚本a、b和c将会很有帮助。 - Radu Iordache
你的意思是说上一个脚本(b)在c执行之前没有完成吗? - user9914491
@Aran-Fey 嗯,根据文档,除非将 locals() 显式地传递给 execfile(如果我理解正确的话),否则不应该发生这种情况。 - DeepSpace
请提供完整的堆栈跟踪信息。 - DeepSpace
如果你使用了名为 global 的变量,那就可以解释这个问题了。 - Xantium
2个回答

0

检查您不同脚本中变量之间的命名冲突。尝试仅使用a运行它,然后再仅使用b运行它,以查看哪个引起了问题,然后查看这两个脚本。如果它们都在相同的名称空间中运行,则很可能您两次使用了相同的变量名或函数名,并且在先前的脚本中声明为整数的某些应该是字符串。

此外,您是否考虑将所有内容分组到函数中,然后只导入其他脚本?


0

c 在顶层脚本中声明,因此它自动成为 globals() 字典的成员。这意味着如果前两个脚本中有任何一行包含 c=1(或任何整数值),则您的全局变量 c 将被覆盖。

由于您不希望子脚本更改任何全局变量,因此可以尝试传递一个新的空字典:

print "Executing part 1..."
execfile(a, {})
print "Executing part 2..."
execfile(b, {})
print "Executing part 3..."
execfile(c, {})
print "Executing part 4..."
execfile(d, {})

由于下标从一个空的全局字典开始,因此无法再覆盖顶层脚本中的变量。

这就是问题所在。"c"是其中一个脚本中的变量。我将执行变量分别更改为moe、larry、curly和shemp,然后它完美地工作了。非常感谢! - user9914491

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接