kulaka 发表于 2020-9-7 23:44:08

关于 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()

求大佬指点迷经!! 如果有更好完善代码的方法就更好了!!! 感谢!!!!

kulaka 发表于 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'

彩虹七号 发表于 2020-9-8 09:04:57

在同级文件夹下添加__init__.py试一试

kulaka 发表于 2020-9-8 10:09:22

彩虹七号 发表于 2020-9-8 09:04
在同级文件夹下添加__init__.py试一试

是添加一个空的__init__.py文件吗? 我试了一下还是一样的报错

suchocolate 发表于 2020-9-8 10:36:27

我看了translator码源,没有current_content属性。
看了pypi信息,作者就留了邮箱,其他啥都没写,你是如何知道这个模块可以完成你的chatroom的?

彩虹七号 发表于 2020-9-8 11:25:29

kulaka 发表于 2020-9-8 10:09
是添加一个空的__init__.py文件吗? 我试了一下还是一样的报错

又仔细看了看,在translator里确实没有找到current_content属性

kulaka 发表于 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的想法很简单,就是获取从一端到另一端传输的数据,调用翻译模块进行翻译,再给到在另一端打印出被翻译的内容、

kulaka 发表于 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,是大概这个思路吗?

suchocolate 发表于 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数据,这都哪跟哪啊?

彩虹七号 发表于 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"]
    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

kulaka 发表于 2020-9-10 11:32:27

彩虹七号 发表于 2020-9-9 12:55
对你的代码做了点改动,如果要翻译中文需要加判断
#server.py
import socket


谢谢,确实解决了AttributError的问题,但这个程序还是没有很完善,但出现了KeyError,我用try except避免了,但是程序完成的还不是很理想。总之,感谢帮助

kulaka 发表于 2020-9-10 11:40:11

suchocolate 发表于 2020-9-8 14:27
没看懂你说啥。你的报错是因为translator没有属性current_content,而你刚说的response的content是urll ...

不好意思,我是刚学python的小白,问题说的不是很清楚,不过感谢你的回答
页: [1]
查看完整版本: 关于 AttributeError的问题(相关:爬虫与计算机网络)