鱼C论坛

 找回密码
 立即注册
查看: 1572|回复: 13

为何去掉 if __name__ == '__main__':代码就可以跑起来?

[复制链接]
发表于 2019-1-26 00:05:36 | 显示全部楼层 |阅读模式

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

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

x
截图:去掉12行: if __name__ == '__main__:
                13行:get_translate_data( '我爱数据' )
这两行错哪里了?看不懂出错的原因。请指教一下。
1.png
2.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-1-26 00:06:50 | 显示全部楼层
去掉最后两行,if __name__ == '__main__',代码就可以跑起来,为什么?错哪里了?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-26 00:30:34 | 显示全部楼层
本帖最后由 Stubborn 于 2019-1-26 00:34 编辑

一个python文件通常有两种使用方法,第一是作为脚本直接执行,第二是 import 到其他的 python 脚本中被调用(模块重用)执行。因此if __name__ == 'main': 的作用就是控制这两种情况执行代码的过程,在if __name__ == 'main': 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而 import 到其他脚本中是不会被执行的

你确定这个报错和if __name__ == 'main'这个有关系?贴代码看看 函数报错不是在11行,报的键值错误 KEYerror吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-26 02:31:52 | 显示全部楼层
Stubborn 发表于 2019-1-26 00:30
一个python文件通常有两种使用方法,第一是作为脚本直接执行,第二是 import 到其他的 python 脚本中被调用 ...

没错啊,是translateResult

3.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-26 02:39:38 | 显示全部楼层
Stubborn 发表于 2019-1-26 00:30
一个python文件通常有两种使用方法,第一是作为脚本直接执行,第二是 import 到其他的 python 脚本中被调用 ...

谢谢你,我找到原因了,不是KeyError的错。但是引出新问题了。
错误的原因是:if __name__ == '__main__'

我看了你的回复是:if __name__=='main',这个main没有带前后两边的‘__’双下划线。
我按照你的写法,把双下划线“__”都去掉。这样就跑过了。
为什么??"__"双下划线,我是按照书面添加上去的。
4.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-26 03:04:40 | 显示全部楼层
tradingxxx 发表于 2019-1-26 02:39
谢谢你,我找到原因了,不是KeyError的错。但是引出新问题了。
错误的原因是:if __name__ == '__main__ ...

不不不,那个是我粘贴的:if __name__ == "__main__":  这样的写法没错,我都是这样写的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-26 12:28:56 | 显示全部楼层
本帖最后由 jackz007 于 2019-1-26 12:33 编辑

     错误信息好像是说字典型数据 content 里面不存在键值为 “translateResult” 对应的项吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-26 13:08:21 | 显示全部楼层
Stubborn 发表于 2019-1-26 03:04
不不不,那个是我粘贴的:if __name__ == "__main__":  这样的写法没错,我都是这样写的

问题这样写跑不动,会错误。把if __name__ == "__main__":后面的一起删掉,就可以跑起来。为什么加了if这段就不行?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-26 13:10:45 | 显示全部楼层
jackz007 发表于 2019-1-26 12:28
错误信息好像是说字典型数据 content 里面不存在键值为 “translateResult” 对应的项吧?

我再去里面看看有没有
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-26 13:44:36 | 显示全部楼层
本帖最后由 jackz007 于 2019-1-26 14:51 编辑

    找到问题了,原因是网站反馈的是错误信息,并不是预期的结果,所以会出错。

    问题出在这条语句:

  1. url = 'http://fanyi.youdao.com/translate_o?smartresulate=dict&smartresulate=rule'
复制代码


    把它改成:

  1. url = 'http://fanyi.youdao.com/translate?smartresulate=dict&smartresulate=rule'
复制代码


    问题就解决了,楼主不妨试试看

    下回可不可以不要只贴图片,关键是要把代码贴出来,既然目的是来解决问题,就不要藏着掖着的,替人敲代码实在是让人憋屈、恼火!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-26 15:31:40 | 显示全部楼层
好的,下回记得贴代码,谢谢您,去掉'_o'好像是因为有爬虫问题?

另外我是新手,对于如何提问只能慢慢通过你们的帮助,让我对如何提问有进一步了解。小白一名,心里感慨其实挺难的。书本也好,视频也好,很多都是过时的。
只能走一步看一步,因为没有什么基础。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-26 15:33:49 | 显示全部楼层
jackz007 发表于 2019-1-26 13:44
找到问题了,原因是网站反馈的是错误信息,并不是预期的结果,所以会出错。

    问题出在这条语句: ...

另外附上解决方案:https://fishc.com.cn/thread-93823-1-1.html
该链接有无反爬虫版和有反爬虫版。谢谢鱼C这个论坛。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-26 15:46:39 | 显示全部楼层
本帖最后由 jackz007 于 2019-1-26 15:48 编辑
tradingxxx 发表于 2019-1-26 15:31
好的,下回记得贴代码,谢谢您,去掉'_o'好像是因为有爬虫问题?

另外我是新手,对于如何提问只能慢慢通 ...

  1. #!/usr/bin/python
  2. #coding:gbk

  3. import requests
  4. import json

  5. def get_translate_data(word=None):
  6.     url = 'http://fanyi.youdao.com/translate?smartresulate=dict&smartresulate=rule'
  7.     Form_Data = {'i' : word , 'from' : 'AUTO' , 'to' : 'AUTO' , 'smartresulae' : 'dict' , 'client' : 'fanyideskweb' ,
  8.                  'salt' : '15484256349899' , 'sign' : '21bbe0dec43bb19842ff6ddbd99d3605' , 'ts' : '1548425634989' ,
  9.                  'bv' : '6f014bd66917f921835d1d6ae8073eb1' , 'doctype' : 'json' , 'version' : '2.1' , 'keyfrom' : 'fanyi.web' ,
  10.                  'action' : 'FY_BY_REALTIME' , 'typoResult' : 'false'}
  11.     response = requests . post(url , data = Form_Data)
  12.     content = json . loads(response . text)
  13.     print(content['translateResult'][0][0]['tgt'])

  14. if __name__ == '__main__':
  15.     get_translate_data('我爱数据')
复制代码


运行环境:python 2.7.13

运行情况:

F:\[2019]\00.00.Exercise\Python\fanyi>python fanyi.py
I love the data

F:\[2019]\00.00.Exercise\Python\fanyi>

楼主可以随时试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-26 16:12:49 | 显示全部楼层
jackz007 发表于 2019-1-26 15:46
运行环境:python 2.7.13

运行情况:

可以跑起来,你的方法是去掉'_o',这是'_o'是反爬机制的一种。
我还找到它的原理:https://blog.csdn.net/levon2018/article/details/80343531
去'_o'治标不治本,您可以参考一下上面链接,估计对以后反爬学习会有帮助。
最后,谢谢您的热心。谢谢!

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-13 14:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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