找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 3375|回复: 8

[问题求助] python代码执行失败,不返回错误详细日志

[复制链接]
发表于 2025-7-7 08:31:14 | 显示全部楼层 |阅读模式
本帖最后由 小白龙 于 2025-7-7 08:58 编辑

正在使用chilkat2-python库, https://www.chilkatsoft.com/chilkat2-python.asp
把下面的代码, 存为a.py, 然后使用命令行 python a.py 执行会报下面的错误

C:\Users\admin\Desktop>python a.py
Traceback (most recent call last):
  File "C:\Users\admin\Desktop\a.py", line 8, in <module>
    print(csv.LastErrorText)
          ^^^^^^^^^^^^^^^^^
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd5 in position 451: invalid continuation byte

  1. import sys
  2. import chilkat2

  3. csv = chilkat2.Csv()

  4. success = csv.LoadFile(r"C:\Users\Administrator\Desktop\sample.csv")
  5. if success != True:
  6.         print(csv.LastErrorText)
  7.         sys.exit()
复制代码
把下面的代码, 存为b.py, 然后使用命令行 python b.py 执行后会正常显示错误日志
  1. import chilkat2

  2. ssh      = chilkat2.Ssh()
  3. port     = 22
  4. success  = ssh.Connect("abc.xxxxxxxx.com", port)
  5. if (success != True):
  6.         print(ssh.LastErrorText)
  7.         exit()
复制代码
正常的错误日志格式如下
ChilkatLog:
  Connect_Ssh:
    DllDate: Apr 29 2025
    ChilkatVersion: 11.0.0
    UnlockBundle has not yet been called.
    UnlockStatus: 0
    Architecture: Little Endian; 32-bit
    Language: Python 3.13.5 (tags/v3.13.5:6cb20a2, Jun 11 2025, 15:56:57) [MSC v.1943 32 bit (Intel)], win32
    VerboseLogging: 0
    Auto unlock for 30-day trial
    UnlockStatusMsg: Unlocked for 30-day trial
    UnlockStatus: 1
    connectInner:
      hostname: abc.78zab.com
      port: 22
      sshConnect:
        connectSocket_v2:
          connect_domain:
            ckDnsResolveDomainIPv4_n:
              domainName: abc.78zab.com
              retry:
                revert_to_old_dns:
                  domain: abc.78zab.com
                  ck_getaddrinfo:
                    getAddressInfo:
                      hostOrIpAddr: abc.78zab.com
                      failPoint: 103
                      rc: 11001
                      SocketError: WSAHOST_NOT_FOUND No such host is known.
                      hostOrIpAddr: abc.78zab.com
                      Versions of Windows earlier than Windows XP are limited to handling IPv4 only
                      On Windows Server 2003 and Windows XP, IPv6 addresses are returned only if IPv6 is installed on the local computer.
                    --getAddressInfo
                    getAddressInfo failed.
                  --ck_getaddrinfo
                  ck_getaddrinfo failed, retrying with gethostbyname.
                  dns_gethostbyname:
                    hostname: abc.78zab.com
                  --dns_gethostbyname
                  failed.
                --revert_to_old_dns
                domain: abc.78zab.com
                DNS resolution failed.
              --retry
              nameservers:
                ip: 192.168.1.1
              --nameservers
              No valid DNS answer..
              domain: abc.78zab.com
              Check to see if the domain is valid by trying a DNS lookup at https://mxtoolbox.com/DNSLookup.aspx
            --ckDnsResolveDomainIPv4_n
          --connect_domain
        --connectSocket_v2
        Failed to establish initial TCP/IP connection
        hostname: abc.78zab.com
        port: 22
      --sshConnect
    --connectInner
    Failed.
  --Connect_Ssh
--ChilkatLog
 楼主| 发表于 2025-7-7 09:45:50 | 显示全部楼层
只能下面这样获取错误信息, 还有什么解决方法吗?

  1. import chilkat2

  2. csv = chilkat2.Csv()

  3. success = csv.LoadFile(r"C:\Users\Administrator\Desktop\sample.csv")
  4. if not success:
  5.     try:
  6.         print(csv.LastErrorText)
  7.     except Exception as e:
  8.         print(repr(e))
  9.     exit()

复制代码
发表于 2025-7-7 19:11:39 | 显示全部楼层
DecodeError
明显的编码问题
请确保csv文件的编码确实是utf8
后面的DNS resolution failed
明显的dns解析问题
请确保dns设置正确并且确实有abc.78zab.com这个域名
发表于 2025-7-7 19:32:02 | 显示全部楼层
本帖最后由 Five66 于 2025-7-7 19:54 编辑

还是详细说下 ,UnicodeDecodeError是python的内置异常 ,原来自带的报错信息足够了 ,因此chilkat2-python库的作者没有对报错信息进行添加 ,修改或自定义 ,作者直接使用默认的了
想要其他报错信息可以自己加上 ,这样别人使用你的代码时 ,就能看到这些报错信息了

  1. import chilkat2

  2. csv = chilkat2.Csv()

  3. success = csv.LoadFile(r"C:\Users\Administrator\Desktop\sample.csv")
  4. if not success:
  5.     try:
  6.         print(csv.LastErrorText)
  7.     except UnicodeDecodeError:
  8.         print('请确保文件的编码确实是utf8')
  9.         raise
  10.     exit()
复制代码
 楼主| 发表于 2025-7-7 21:20:43 | 显示全部楼层
回复 4# Five66


    和csv文件的编码没关系,  因为文件本身就不存在

问题在于, 这个库的老外, 在出错信息中有个系统信息的字段, 是要gbk编码的, 英文系统就没事, 中文系统就出错, 报编码的问题了
发表于 2025-7-8 00:14:31 | 显示全部楼层
啊 ,不对 ,看了下LastErrorText方法的文档 ,描述是:
Provides plain text information about the last called method or property
而1楼代码调用LastErrorText方法时的last called method是csv.LoadFile
换句话说csv.LastErrorText方法获得的结果是执行csv.LoadFile后的信息 ,显然就是csv.LoadFile出错了
因为csv.LoadFile的文档描述是:
Loads a CSV from a file. It is assumed that the CSV file contains ANSI characters.
Returns True for success, False for failure.
根据描述 ,有可能跟csv文件的编码有关系
 楼主| 发表于 2025-7-8 05:14:59 | 显示全部楼层
回复 6# Five66

大佬还没有明白我的意思, 加载的csv文件, 根本就不存在, 这是我故意不让文件存在的, 按理应该有报错日志输出的, 但是因为日志里有下面这段文字, 这段文字后面是中文, 因为官方没做编码转换, 就显示乱码了, 然后就不显示日志了, 而是异常了

osErrorInfo: 系统找不到指定的文件
 楼主| 发表于 2025-7-8 05:19:01 | 显示全部楼层
回复 6# Five66


    应该直接输出下面的日志才对, 下面日志中的中文字部分是我问ai答出来的, 这chilkat库,就在这里出bug了
  1. ChilkatLog:
  2.   LoadFile:
  3.     DllDate: Apr 29 2025
  4.     ChilkatVersion: 11.0.0
  5.     UnlockPrefix: DZYLN8
  6.     UnlockStatus: 2
  7.     Architecture: Little Endian; 32-bit
  8.     Language: Python 3.12.7 (tags/v3.12.7:0b05ead, Oct  1 2024, 02:44:45) [MSC v.1941 32 bit (Intel)], win32
  9.     VerboseLogging: 0
  10.     loadFileX:
  11.       Failed to open file (3)
  12.       filePath: C:\Users\Administrator\Documents\My QM\sample.csv
  13.       osErrorInfo: 系统找不到指定的文件。
  14.       windowsError: 2
  15.       localWindowsFilePath: C:\Users\Administrator\Documents\My QM\sample.csv
  16.       Failed to open for read.
  17.     --loadFileX
  18.     Failed.
  19.   --LoadFile
  20. --ChilkatLog
复制代码
发表于 2025-7-8 21:04:35 | 显示全部楼层
回复 7# 小白龙


    啊 ,不是 ,只是单纯的说csv.LoadFile有可能跟csv文件的编码有关系 ,换句话说csv文件存在时有可能因为csv文件的编码出现问题 ,不单单只是csv文件不存在时
虽然1楼里的是因为csv文件不存在 ,但是因为csv.LoadFile ,不一定全都是因为csv文件不存在 ,只是告诉你还有其他可能 ,当然因为是没有实际用过 ,也不知道是不是真的是有可能
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 20:58 , Processed in 0.018764 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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