鱼C论坛

 找回密码
 立即注册
查看: 8271|回复: 8

[已解决]TypeError: 'bytes' object is not callable这个错误很头疼

[复制链接]
发表于 2018-3-24 23:12:14 | 显示全部楼层 |阅读模式

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

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

x
这里有一串字符串,我用while循环想取出每个字符,并将其转化成ASCII码,结果就报了这个错误,求大佬给我看一下

这里贴上出错代码:

import codecs
import base64

strs = 'a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws'
str1 = codecs.encode(strs, 'rot13')
str2 = str1[::-1]
str = base64.b64decode(str2)

while i <= len(str):
    asc = ord(str(str[i:i+1]))  #此处为出错代码
    print(asc)
    i += 1

求大佬指条明路
最佳答案
2018-3-24 23:37:49
我不太清楚你要干嘛,但是吧,我试了试这样改了改,它是可以运行的

顺便我对比了一下str3和str4,貌似只有开头第一个不一样,但是现在是

没有问题的,太深层次的加密解密编码我也不太清楚了,有兴趣你可以自己研究一下

  1. import codecs
  2. import base64

  3. strs = 'a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws'
  4. str1 = codecs.encode(strs, 'rot13')
  5. str2 = str1[::-1]
  6. str3 = base64.b64decode(str2)
  7. str4 = codecs.decode(str3,'utf-8')
  8. print(str4)
  9. print(str3)
  10. i = 0
  11. while i < len(str4):
  12.     asc = ord(str(str4[i]))  #此处为出错代码
  13.     print(asc)
  14.     i += 1
复制代码


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

使用道具 举报

发表于 2018-3-24 23:20:33 | 显示全部楼层
本帖最后由 °蓝鲤歌蓝 于 2018-3-24 23:22 编辑
  1. str = base64.b64decode(str2)
复制代码

这一行不要用 str 做对象名
  1. asc = ord(str(str[i:i+1]))
复制代码

这一行 对象名 跟 方法名 冲突了。

还有你的 i 不赋值不会报错吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 23:26:26 | 显示全部楼层
刚刚有发现了问题,你的 str 经过 base64 加密后有些不是字母,所以用 ord()方法会报错。
话说你都不打断点调试吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 23:30:59 | 显示全部楼层
°蓝鲤歌蓝 发表于 2018-3-24 23:26
刚刚有发现了问题,你的 str 经过 base64 加密后有些不是字母,所以用 ord()方法会报错。
话说你都不打断 ...

它的问题远不止这些,base64加密后,使用print输出貌似都是可以有ascii码的,但是,

字符串索引就会出现严重的错误,str3[i],str3是我把他最后一个str修改之后的,

str3[0] = 126 ,str3[1] = 56 ,有点看不懂了,感觉很高深的样子。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 23:37:49 | 显示全部楼层    本楼为最佳答案   
我不太清楚你要干嘛,但是吧,我试了试这样改了改,它是可以运行的

顺便我对比了一下str3和str4,貌似只有开头第一个不一样,但是现在是

没有问题的,太深层次的加密解密编码我也不太清楚了,有兴趣你可以自己研究一下

  1. import codecs
  2. import base64

  3. strs = 'a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws'
  4. str1 = codecs.encode(strs, 'rot13')
  5. str2 = str1[::-1]
  6. str3 = base64.b64decode(str2)
  7. str4 = codecs.decode(str3,'utf-8')
  8. print(str4)
  9. print(str3)
  10. i = 0
  11. while i < len(str4):
  12.     asc = ord(str(str4[i]))  #此处为出错代码
  13.     print(asc)
  14.     i += 1
复制代码


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

使用道具 举报

 楼主| 发表于 2018-3-24 23:46:37 | 显示全部楼层
°蓝鲤歌蓝 发表于 2018-3-24 23:20
这一行不要用 str 做对象名

这一行 对象名 跟 方法名 冲突了。

感谢大佬,因为删了一些代码不小心把i的赋值语句给删了,原来这边是因为命名冲突了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-24 23:48:17 | 显示全部楼层
Zmynx_2017 发表于 2018-3-24 23:37
我不太清楚你要干嘛,但是吧,我试了试这样改了改,它是可以运行的

顺便我对比了一下str3和str4,貌似只 ...

最近刚学了python  因为再打ctf,所以想拿python写writeup练练手,感谢大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-24 23:58:26 | 显示全部楼层
°蓝鲤歌蓝 发表于 2018-3-24 23:26
刚刚有发现了问题,你的 str 经过 base64 加密后有些不是字母,所以用 ord()方法会报错。
话说你都不打断 ...

那还有什么能将特殊字符转ASCII码的方法吗,我还比较萌新,刚学python不久,是该学学调试了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-25 00:11:50 | 显示全部楼层
°蓝鲤歌蓝 发表于 2018-3-24 23:26
刚刚有发现了问题,你的 str 经过 base64 加密后有些不是字母,所以用 ord()方法会报错。
话说你都不打断 ...

用了下面老哥的方法,再用utf8编码一下,ord()确实不会报错了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-9 18:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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