需要一个整数?open()

53 投票
7 回答
103417 浏览
提问于 2025-04-15 12:30

我有一个非常简单的Python脚本,它应该扫描一个文本文件,这个文件里的每一行都是格式为id='value'的内容,然后把这些内容放到一个字典里。这个Python模块叫做chval.py,输入文件是in.txt。以下是代码:

import os,sys
from os import *
from sys import *

vals = {}

f = open(sys.argv[1], 'r')

for line in val_f:
    t = line.split('=')
    t[1].strip('\'')
    vals.append(t[0], t[1])

print vals

f.close()

当我尝试运行它时,出现了以下错误:

追踪(最近的调用在最前面):
文件 "chval.py",第9行,在?
f = open(sys.argv[1], 'r') 类型错误:需要一个整数

我正在使用Python 2.4……因为我被挑战不使用更新的版本。关于open()函数,有什么我不知道的地方吗?为什么它需要一个整数?

在那行之后的代码没有经过测试。简单来说:为什么会出现这个错误,我该怎么解决?

7 个回答

12

值得注意的是,从Python 2.6开始,内置的open()函数现在是io.open()函数的一个别名。这意味着它们的功能是一样的。甚至在Python 3的时候,还考虑过要去掉这个内置的open(),强制大家使用io.open,以避免一些意外的命名冲突,比如使用“from blah import *”这样的方式。在Python 2.6及以上版本中,你可以这样写(而且可以把这种写法当作一种好习惯):

import io
filehandle = io.open(sys.argv[1], 'r')
15

不要随便使用 import * from wherever,除非你有很好的理由(而且这样的理由不多)。

你的代码正在使用 os.open() 这个函数,而不是内置的 open() 函数。如果你真的想用 os.open(),那么先用 import os 导入它,然后再调用 os.open(....)。不管你想用哪个 open 函数,记得先看看它需要什么参数,了解一下文档。

92

因为你用了 from os import * 这行代码,所以你不小心用了 os.open 这个函数。这个函数需要一个整数类型的标志,而不是像 "r" 或 "w" 这样的文本。把那行代码去掉,你就能解决这个错误了。

撰写回答