变量在两个不同的函数中不是同一类型

时间:2011-07-29 15:43:14

标签: python

我有两个函数可以打印到excel文件中。只有输入是文件名。这是代码:

#excelpy
import excelpy

#Tinker
from Tkinter import *
from tkSimpleDialog import *
from tkFileDialog import *

功能模式1

def Mode1(full_name):
    print full_name
    print type(full_name) 
    testwbook = excelpy.workbook(full_name) 
    testwbook.show() 
    testwbook.set_cell((1,1),'TEST1', fontColor='red') 
    testwbook.set_range(2,1,['Number','Name']) 
    m1 = testwbook.save(full_name)
    testwbook.close()
    return m1

功能模式2

def Mode2(full_name):
    print full_name
    print type(full_name) 
    testwbook = excelpy.workbook(full_name) 
    testwbook.show() 
    testwbook.set_cell((1,1),'TEST2', fontColor='red') 
    testwbook.set_range(2,1,['Number','Name']) 
    m2 = testwbook.save(full_name)
    testwbook.close()
    return m2

主要

root = Tk()
d = str(asksaveasfilename(parent=root,filetypes=[('Excel','*.xls')],title="Save report as..."))
d = d + '.xls'
d = d.replace('/','\\')
root.destroy()  

Mode1(d)
Mode2(d)

偶尔我会收到以下错误:

Traceback (most recent call last):
  File "T:\TEST\testpy.py", line 2035, in <module>
    Mode2(d)
  File ""T:\TEST\testpy.py"", line 1381, in Mode2
    print type(full_name) 
TypeError: 'str' object is not callable

知道为什么会这样吗?我该如何预防?

2 个答案:

答案 0 :(得分:3)

您收到错误的行中唯一的函数调用是对内置函数type()的调用,因此您的错误消息的唯一解释是您覆盖了内置名称{{1}通过指向字符串对象的全局名称type。尝试添加

type

print type

答案 1 :(得分:1)

看起来你正在将一个名为type的(全局)变量设置为字符串,从而覆盖内置的type函数。

尝试搜索代码type =,看看会出现什么。

可以理解的是,当您尝试调用type时,Python会抛出该异常(字符串不能被“调用”)。