Python - mode non valide ("w") ou un nom de fichier

J'ai rencontré un très étrange erreur.

J'ai ce code dans le cadre de plusieurs de mes fonctions dans mon script python:

url=['http://agecommunity.com/query/query.aspx?name=', name, '&md=user']
url=''.join(url)
file = open("QueryESO.xml", "w")
filehandle = urllib.urlopen(url)
for lines in filehandle.readlines():
    file.write(lines)
file.close()

Quand je le lance dans le vide, tout fonctionne très bien.

Si je le lance avec Python (Ligne de Commande), puis il me donne cette erreur:

[Errno 22] mode non valide ("w") ou un nom de fichier: 'QueryESO.xml'

Voici où ça commence à devenir bizarre:
Bizarre #1: j'ai exactement le même code dans des fonctions différentes dans mon script, mais l'erreur ne se produit que pour l'un d'entre eux.

Bizarre #2: Si je change le code, il fonctionne très bien:

url=['http://agecommunity.com/query/query.aspx?name=', name, '&md=user']
print url
url=''.join(url)
file = open("QueryESO.xml", "w")
filehandle = urllib.urlopen(url)
for lines in filehandle.readlines():
    file.write(lines)
file.close()

J'ai aussi essayé de déplacer l'impression url après, j'ai rejoint la liste, ce qui n'a pas fonctionné, et j'ai juste essayé d'impression "", qui a également obtenu le mentionné précédemment erreur.

Donc je suppose que j'ai trouvé une solution... mais quelqu'un peut expliquer ce comportement? Suis-je en train de faire quelque chose de mal? (Et vous avez besoin de moi de publier la totalité du script de sorte que vous pouvez jouer avec ça?)

EDIT: Voici le code entier:

import urllib
from Tkinter import *
import tkFont
master = Tk()
QUERY_ESO = "QueryESO.xml"
def QueryXML(xml, attribute):
x = ["<", attribute, ">"]
x=''.join(x)
z = xml.split(x, 1)
x = ["</", attribute, ">"]
x=''.join(x)
z=z[1]
z=z.split(x, 1)
return z[0]
def AddFriend():
nfentry = nfe2
name=nfentry.get()
url=['http://agecommunity.com/query/query.aspx?name=', name, '&md=user']
url=''.join(url)
file = open("QueryESO.xml", "w")
filehandle = urllib.urlopen(url)
for lines in filehandle.readlines():
file.write(lines)
file.close()
f = open(QUERY_ESO, "r")
xml = f.readlines()
f.close()
xml=''.join(xml)
f = open("Friends.txt", "r")
filestring = f.read()
f.close()
fs = filestring.split('\n')
if name in fs:
print "Friend Already Added"
elif xml == "<?xml version='1.0' encoding='utf-8'?><error>Failed to find user</error>":
print "User does not exist"
else:
fs.append(name)
fs = '\n'.join(fs)
f = open("Friends.txt", "w")
f.write(fs)
f.close()
nfe2.set("")
nfentry = nfe2
def DeleteFriend():
ofentry = ofe2
name=ofentry.get()
f = open("Friends.txt", "r")
filestring = f.read()
f.close()
fs = filestring.split('\n')
if name in fs:
fs.remove(name)
fs = '\n'.join(fs)
f = open("Friends.txt", "w")
f.write(fs)
ofe2.set("")
ofentry = ofe2
def IsOnline(name):
url=['http://agecommunity.com/query/query.aspx?name=', name, '&md=user']
print url
url=''.join(url)
file = open("QueryESO.xml", "w")
filehandle = urllib.urlopen(url)
for lines in filehandle.readlines():
file.write(lines)
file.close()
f = open(QUERY_ESO, "r")
xml = f.readlines()
f.close()
xml=''.join(xml)
if xml == "<?xml version='1.0' encoding='utf-8'?><error>Failed to find user</error>":
print "User does not exist"
else: 
datetime = QueryXML(xml, "LastUpdated")
datetime = datetime.split('T', 1)
time = datetime[1].split('Z', 1)
date = datetime[0]
print "User", name, "is", QueryXML(xml, "presence"), "as of", date, "at", time[0]
return QueryXML(xml, "presence")
def FriendCheck():
f = open("Friends.txt", "r")
filestring = f.read()
f.close()
fs = filestring.split('\n')
Laonline = Label(lowerframe, text="")
Laonline.grid(column=0, row=0)
Laonline.grid_forget()
x=0
while x <= (len(fs)-1):
if IsOnline(fs[x]) == "online":
Laonline = Label(lowerframe, text=fs[x])
Laonline.grid(column=0, row=x)
x=x+1
def RunTwo(Function1, Function2):
Function1()
Function2()
def DeleteAllFriends():
fs = "<?xml version='1.0' encoding='utf-8'?>\n<friends>\n</friends>"
f = open("Friends.txt", "w")
f.write(fs)
f.close()
FriendCheck()
def DAFPop():
DAFpopup = Toplevel()
DAFframe = Frame(DAFpopup)
DAFframe.grid(columnspan=4, column=0, row=0)
F1 = DeleteAllFriends
F2 = DAFpopup.destroy
Q1 = lambda: RunTwo(F1, F2)
DAFL1 = Label(DAFframe, text="This delete all of your friends. Are you sure you wish to continue?")
DAFL1.grid()
DAFOK = Button(DAFpopup, width=10, text="Yes", command=Q1)
DAFOK.grid(column=1, row=1)
DAFNO = Button(DAFpopup, width=10, text="No", command=DAFpopup.destroy)
DAFNO.grid(column=2, row=1)
frame = Frame(master, bd=5)
frame.grid()
friendlist = Frame(frame, bd=5, width=150, height=400)
friendlist.grid(column=0, row=0, rowspan=15)
lon = Frame(friendlist, bd=2, width=150, height=10)
lon.grid()
Lonline = Label(lon, text="Friends Online")
Lonline.grid(column=0, row=1)
underlined = tkFont.Font(Lonline, Lonline.cget("font"))
underlined.configure(underline=True)
Lonline.configure(font=underlined)
lowerframe = Frame(friendlist, bd=2, width=150, height=390)
lowerframe.grid()
lowerframe.grid_propagate(0)
newfriendframe = Frame(frame, bd=2)
newfriendframe.grid(column=1, row=0)
nfe2 = StringVar()
nfentry = Entry(newfriendframe, width=12, textvariable=nfe2)
nfentry.grid()
nfe2.set("")
nfentry = nfe2.get()
newfriend = Button(newfriendframe, text="Add Friend", width=10, command=AddFriend)
newfriend.grid(column=0, row=1)
oldfriendframe = Frame(frame, bd=2)
oldfriendframe.grid(column=1, row=1)
ofe2 = StringVar()
ofentry = Entry(oldfriendframe, width=12,textvariable=ofe2)
ofentry.grid()
ofe2.set("")
ofentry = ofe2.get()
oldfriend = Button(oldfriendframe, text="Delete Friend", width=10, command=DeleteFriend)
oldfriend.grid(column=0, row=1)
rof = Button(frame, text="Reset List", width=10, command=DAFPop)
rof.grid(column=1, row=2)
update = Button(frame, text="Refresh", width=10, command=FriendCheck)
update.grid(column=1, row=3)
close = Button(frame, text="Exit", width=10, command=master.destroy)
close.grid(column=1, row=4)
master.mainloop()

Et la fonction qui ne fonctionne pas est IsOnline(), bien que j'ai laissé l'impression d'url pour le code que j'ai posté, ce qui semble pour le garder en cours d'exécution sans erreur 90% du temps, alors que sans cela, il obtient l'erreur de 100% du temps.

Il dispose également d'une dépendance de fichier texte, Friends.txt:

zorc17
WilliamWallace30
Sir_Constantin
jerom_the_brave
elvarg_flame
refinedchaos
Metis
Lancener
Neverseperat
musketeer925
maxulino
Zack_iz_Weird
StormComing

Elle semble créer QueryESO.xml très bien pour moi, même si elle n'est pas là (quand il n'est pas l'erreur, bien sûr). Si ce n'est pas le cas pour vous, un fichier vide appelé QueryESO.xml fonctionne correctement, qu'il obtient son contenu à partir d'une page web.

Le bouton "Actualiser" est celui qui a l'erreur.

file est le nom du type de fichier en Python, il est considéré comme une mauvaise pratique pour le remplacer.
Le code spécifie "QueryESO.xml" par lui-même, correct? (Pas de chemin/les répertoires en face?)
Le code que j'ai posté est exactement ce qui est dans mon script... donc il n'y a pas tous les chemins d'accès ou des répertoires en face. Cela fonctionne parce que le fichier est dans le même répertoire (à droite?). et @katrielalex: je vais être sûr de le changer de la substitution de la intégré dans un nom de fichier.
juste pour info, ne pouvait pas doublon avec 2.6.6 et le code donné
Je doute que c'est pertinent, mais il vous manque un f.close() dans DeleteFriend() (dans le if name in fs section.)

OriginalL'auteur Adam Seitz | 2011-02-24