关于 AttributeError的问题(相关:爬虫与计算机网络)
前一段时间在想做一个简单的chatroom ,主要功能就是实现对话翻译。但是我遇到了一个问题, AttributeError。 我看了网上的解决方法例如删掉pyc文件的东西,和改文件名,但是都没有成功。代码如下:
#server.py
import socket
import translator
s = socket.socket()
ip = 'localhost'
port = 8000
s.bind((ip,port))
s.listen(1)
print("Wait for client")
c, addr = s.accept()
print ('client added !')
while True:
msg1 = input (">>>")
translator.transword = msg1
output = translator.current_content
c.send(output.encode())
print (c.recv(1024).decode())
#client.py
import socket
import translator
s = socket.socket()
ip = 'localhost'
port = 8000
s.connect((ip,port))
print ('Connected ! ')
while True:
print(s.recv(1024).decode())
msg2 = input (">>>")
translator.transword = msg2
output = translator.current_content
s.send(output.encode())
#translator.py
from urllib import request,parse
import json
class fanyi():
def translate(word):
base_url = "http://fy.iciba.com/ajax.php?a=fy"
data = {
"f": "auto",
"t": "auto",
"w": word
}
data_str = parse.urlencode(data)
header = {"User-Agent":" Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36"}
response = request.Request(url=base_url,headers = header,data = bytes(data_str,encoding="utf-8"))
req = request.urlopen(response).read().decode("utf-8")
obj =json.loads(req)
return obj
if __name__ == "__main__":
word = transword
trans_word = translate(word)
current_state = trans_word["status"]
if current_state == 1:
current_content = trans_word["content"]
else:
current_content = trans_word["content"]
fanyi()
求大佬指点迷经!! 如果有更好完善代码的方法就更好了!!! 感谢!!!!
这里是报错
Traceback (most recent call last):
File "C:\Users\User\Downloads\simple-chatroom-pythonsocket-master\simple-chatroom-pythonsocket-master\server.py", line 21, in <module>
output = translator.current_content
AttributeError: module 'translator' has no attribute 'current_content' 在同级文件夹下添加__init__.py试一试 彩虹七号 发表于 2020-9-8 09:04
在同级文件夹下添加__init__.py试一试
是添加一个空的__init__.py文件吗? 我试了一下还是一样的报错 我看了translator码源,没有current_content属性。
看了pypi信息,作者就留了邮箱,其他啥都没写,你是如何知道这个模块可以完成你的chatroom的? kulaka 发表于 2020-9-8 10:09
是添加一个空的__init__.py文件吗? 我试了一下还是一样的报错
又仔细看了看,在translator里确实没有找到current_content属性 suchocolate 发表于 2020-9-8 10:36
我看了translator码源,没有current_content属性。
看了pypi信息,作者就留了邮箱,其他啥都没写,你是如 ...
确实没有Current_content,但是在response中 有content,其中翻译的结果是在out和word_mean中显示出来的,至于我没有写进代码是因为,我有尝试过去掉out和word_mean,最后还是可以运行的。
对于chatroom的模块, 其实就只是一个简陋的客户端和服务端的一个通讯,我在合并翻译模块之前有尝试过单独运行,运行成功。
我对这个project的想法很简单,就是获取从一端到另一端传输的数据,调用翻译模块进行翻译,再给到在另一端打印出被翻译的内容、 彩虹七号 发表于 2020-9-8 11:25
又仔细看了看,在translator里确实没有找到current_content属性
我是参考网上的,但我感觉current_content是一个被赋值的变量,
if current_state == 1:
current_content = trans_word["content"]
content = current_content["out"] #这个是content里边翻译的内容
else:
current_content = trans_word["content"]
content = current_content["word_mean"] #同上
然后在client 和 server 文件中调出这个content,是大概这个思路吗? 本帖最后由 suchocolate 于 2020-9-8 14:28 编辑
kulaka 发表于 2020-9-8 13:11
确实没有Current_content,但是在response中 有content,其中翻译的结果是在out和word_mean中显示出来的 ...
没看懂你说啥。你的报错是因为translator没有属性current_content,而你刚说的response的content是urllib获取url之后得到的byte数据,这都哪跟哪啊?
对你的代码做了点改动,如果要翻译中文需要加判断
#server.py
import socket
import translator
s = socket.socket()
ip = 'localhost'
port = 8000
s.bind((ip,port))
s.listen(1)
print("Wait for client")
c, addr = s.accept()
print ('client added !')
while True:
msg1 = input (">>>")
output = translator.translate(msg1)["content"]["word_mean"]
c.send(output.encode("utf-8"))
print (c.recv(1024).decode())
#client.py
import socket
import translator
s = socket.socket()
ip = 'localhost'
port = 8000
s.connect((ip,port))
print ('Connected ! ')
while True:
print(s.recv(1024).decode())
msg2 = input (">>>")
output = translator.translate(msg2)["content"]["word_mean"]
s.send(output.encode("utf-8"))
#translator.py
from urllib import request,parse
import json
def translate(word):
base_url = "http://fy.iciba.com/ajax.php?a=fy"
data = {
"f": "auto",
"t": "auto",
"w": word
}
data_str = parse.urlencode(data)
header = {"User-Agent":" Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36"}
response = request.Request(url=base_url,headers = header,data = bytes(data_str,encoding="utf-8"))
req = request.urlopen(response).read().decode("utf-8")
obj =json.loads(req)
return obj
彩虹七号 发表于 2020-9-9 12:55
对你的代码做了点改动,如果要翻译中文需要加判断
#server.py
import socket
谢谢,确实解决了AttributError的问题,但这个程序还是没有很完善,但出现了KeyError,我用try except避免了,但是程序完成的还不是很理想。总之,感谢帮助 suchocolate 发表于 2020-9-8 14:27
没看懂你说啥。你的报错是因为translator没有属性current_content,而你刚说的response的content是urll ...
不好意思,我是刚学python的小白,问题说的不是很清楚,不过感谢你的回答
页:
[1]