我有一个非常简单的脚本,我正在执行其他4个脚本。
第17行引发此错误:TypeError: must be string, not int
这是第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
答案 0 :(得分:0)
检查不同脚本中变量之间的命名冲突。尝试仅使用a
运行它并仅使用b
运行它以查看导致问题的那个,然后查看这两个脚本。如果它们都在同一个命名空间中运行,那么你很可能两次使用相同的变量名或函数名,并且应该是一个字符串的东西在前一个脚本中声明为整数。
另外,您是否考虑将所有内容分组到函数中,然后只导入其他脚本?
答案 1 :(得分:0)
c
在顶级脚本中声明,因此它自动成为globals()
字典的成员。这意味着,如果2个第一个脚本中的任何一个包含行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, {})
由于下标以空的全局字典开头,因此无法再覆盖顶级脚本中的变量