鱼C论坛

 找回密码
 立即注册
查看: 1257|回复: 11

[已解决]关于 AttributeError的问题(相关:爬虫与计算机网络)

[复制链接]
发表于 2020-9-7 23:44:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
前一段时间在想做一个简单的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()

求大佬指点迷经!! 如果有更好完善代码的方法就更好了!!! 感谢!!!!
最佳答案
2020-9-9 12:55:12
对你的代码做了点改动,如果要翻译中文需要加判断
#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"][0]
    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"][0]
    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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-9-7 23:48:09 | 显示全部楼层
这里是报错
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'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-8 09:04:57 | 显示全部楼层
在同级文件夹下添加__init__.py试一试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-8 10:09:22 | 显示全部楼层
彩虹七号 发表于 2020-9-8 09:04
在同级文件夹下添加__init__.py试一试

是添加一个空的__init__.py文件吗? 我试了一下还是一样的报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-8 10:36:27 | 显示全部楼层
我看了translator码源,没有current_content属性。
看了pypi信息,作者就留了邮箱,其他啥都没写,你是如何知道这个模块可以完成你的chatroom的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-8 11:25:29 | 显示全部楼层
kulaka 发表于 2020-9-8 10:09
是添加一个空的__init__.py文件吗? 我试了一下还是一样的报错

又仔细看了看,在translator里确实没有找到current_content属性
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-8 13:11:34 | 显示全部楼层
suchocolate 发表于 2020-9-8 10:36
我看了translator码源,没有current_content属性。
看了pypi信息,作者就留了邮箱,其他啥都没写,你是如 ...

确实没有Current_content,但是在response中 有content,其中翻译的结果是在out和word_mean中显示出来的,至于我没有写进代码是因为,我有尝试过去掉out和word_mean,最后还是可以运行的。

对于chatroom的模块, 其实就只是一个简陋的客户端和服务端的一个通讯,我在合并翻译模块之前有尝试过单独运行,运行成功。

我对这个project的想法很简单,就是获取从一端到另一端传输的数据,调用翻译模块进行翻译,再给到在另一端打印出被翻译的内容、
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-8 13:20:18 | 显示全部楼层
彩虹七号 发表于 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,是大概这个思路吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-8 14:27:04 | 显示全部楼层
本帖最后由 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数据,这都哪跟哪啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-9 12:55:12 | 显示全部楼层    本楼为最佳答案   
对你的代码做了点改动,如果要翻译中文需要加判断
#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"][0]
    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"][0]
    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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-10 11:32:27 | 显示全部楼层
彩虹七号 发表于 2020-9-9 12:55
对你的代码做了点改动,如果要翻译中文需要加判断
#server.py
import socket

谢谢,确实解决了AttributError的问题,但这个程序还是没有很完善,但出现了KeyError,我用try except避免了,但是程序完成的还不是很理想。总之,感谢帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-10 11:40:11 | 显示全部楼层
suchocolate 发表于 2020-9-8 14:27
没看懂你说啥。你的报错是因为translator没有属性current_content,而你刚说的response的content是urll ...

不好意思,我是刚学python的小白,问题说的不是很清楚,不过感谢你的回答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 16:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表