Python TypeError:必须是字符串,而不是int

Python TypeError:必须是字符串,而不是int,python,Python,我有一个非常简单的脚本,其中我正在执行另外4个脚本 第17行抛出此错误:TypeError:必须是字符串,而不是int 这是第17行的全部内容: execfile(c) 它执行前两个脚本(a&b),没有问题,但在c上失败。如果我注释掉前两行脚本,它将成功运行第17行 有什么想法吗 整个脚本: import datetime today = str(datetime.datetime.today().strftime('%Y-%m-%d %H:%M')) a = r'\\server\Sch

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

第17行抛出此错误:
TypeError:必须是字符串,而不是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

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


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

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

由于您不希望下标更改任何全局变量,您可以尝试传递一个新的空dict:

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

由于下标以一个空的全局字串开头,无法再覆盖顶级脚本中的变量

看起来
a
b
正在覆盖您的
c
。查看脚本a、b和c会很有用。您是指上一个脚本(b)在执行c之前不是完成了吗?@Aran Fey well根据文档,除非将
locals()
显式传递给
execfile
(如果我理解正确的话),否则不应该发生这种情况。请提供完整的堆栈跟踪这就是问题所在。“c”是其中一个脚本中的变量。我将exec变量分别更改为moe、larry、curly和shemp,它工作得非常好。非常感谢!