精华内容
下载资源
问答
  • 我的代码又出错!伙计,我只是一直在弄…我以前的那个(修好)是herefrom Tkinter import *def get_info(key):pass#do more laterdef create_new():create = Toplevel(root)create.title('Create A New Contact')...

    我的代码又出错了!伙计,我只是一直在弄…我以前的那个(修好了)

    是herefrom Tkinter import *

    def get_info(key):

    pass#do more later

    def create_new():

    create = Toplevel(root)

    create.title('Create A New Contact')

    Label(create, text='Name: ').grid(row=0, sticky=W+E)

    name = Entry(create, width=8).grid(row=1, sticky=W+E)

    Label(create, text='Address(ex. 1111 Main St, MyCity, Anystate 12345): ', wrapLength=1).grid(row=2, sticky=W+E)

    address = Entry(create, width=8).grid(row=3, sticky=W+E)

    def access():

    access_window = Toplevel(root)

    access_window.title("Access a Contact")

    Label(access_window, text="Enter a first name: ").grid(row=0, sticky=W+E)

    access_key = Entry(access_window, width=8).grid(row=1, sticky=W+E)

    Button(access_window, text="Submit", command=lambda: get_info(access_key.get('0.0', 'end-1c'))).grid(row=2, sticky='W+E')

    root = Tk()

    root.title('Address Book')

    button1 = Button(root, text="Create New", command=create_new).grid(row=0, column=0)

    button2 = Button(root, text=“Access Person”, command=access).grid(row=0, column=1)

    这应该没什么错,但确实有。这不是一个错误,只是当我点击“创建新”按钮时,只有名称条目显示出来,其他的都不会显示。使用“访问人”按钮,它只显示“输入名称:”而没有输入。在

    展开全文
  • 缓解一下视疲劳缓解一下视疲劳欢迎关注,点赞,评论Python 程序异常处理与 logging 模块1 程序异常程序异常,就是程序出错,程序员一般叫做 BUG(八哥),程序不出错是不可能发生的事情,而程序员要做的事情就是...

    如果你有想要交流的想法、技术,欢迎在评论区留言。

    本篇文章主要内容为程序错误与异常处理,顺带会说一下内置模块 logging 。

    缓解一下视疲劳

    缓解一下视疲劳欢迎关注,点赞,评论

    Python 程序异常处理与 logging 模块

    1 程序异常

    程序异常,就是程序出错了,程序员一般叫做 BUG(八哥),写程序不出错是不可能发生的事情,而程序员要做的事情就是及时的捕获错误,修改错误。

    1.1 最常见的错误 - 除数为 0

    在数学中也存在类似的问题,除数不可以为 0。相同的概念在编程中也是存在的。

    num1 = 20

    num2 = 0

    num3 = num1 / num2

    print(num3)

    运行代码出现下面的错误:

    Traceback (most recent call last):

    File "D:/gun/2/demo7.py", line 3, in

    num3 = num1 / num2

    ZeroDivisionError: division by zero

    错误内容就是末尾的 ZeroDivisionError: division by zero ,当出现错误程序崩溃,终止运行。错误异常中也提示了错误出现的行数 line 3 在第三行,但查看行号排查错误在很多时候无法直接解决问题,因为出错的地方不在行号那一行,修改 BUG 的效率一般会随着你对 Python 学习的深入逐步增强改善。

    1.2 try ... except 语句

    刚才的程序出现错误就终止运行了,如何避免程序被强迫终止,出现问题提示出问题,然后继续运行呢?这就是 try ... except 语句使用的场景了。

    语法格式:

    try:

    可能会出错的代码

    except 异常对象:

    处理异常代码

    按照上述语法格式修改上文代码。

    num1 = 20

    num2 = 0

    try:

    num3 = num1 / num2

    except ZeroDivisionError:

    print("除数不可以为 0 ")

    此时程序不会报错,当发现除数为 0 会进入异常处理,直接输出除数不能为 0。

    try 表示测试代码部分是否存在异常,except 表示捕获异常,前提是出现异常。如果 try 语句中没有任何错误,except 中的代码不会执行。

    还有一点需要注意,在 except 后面是异常对象,该异常对象我们设置为 ZeroDivisionError 这是因为已经知道是会出现这个异常,如果在编码过程中不知道会出现哪种异常,依旧会出现错误。

    num1 = 20

    num2 = "abc"

    try:

    num3 = num1 / num2

    except ZeroDivisionError:

    print("除数不可以为 0 ")

    上述代码依旧会报错,报错的异常为:

    Traceback (most recent call last):

    File "D:/gun/2/demo7.py", line 4, in

    num3 = num1 / num2

    TypeError: unsupported operand type(s) for /: 'int' and 'str'

    如果想在 except 后面支持本异常,需要添加上 TypeError。

    num1 = 20

    num2 = "abc"

    try:

    num3 = num1 / num2

    except (ZeroDivisionError,TypeError):

    print("除数不可以为 0 ")

    也可以分开编写:

    num1 = 20

    num2 = "abc"

    try:

    num3 = num1 / num2

    except ZeroDivisionError:

    print("除数不可以为 0 ")

    except TypeError:

    print("除数类型不对")

    该种写法在书写的时候需要预先知道会提示哪种异常,如果异常不清楚那可以省略异常对象,直接使用下述代码即可。

    num1 = 20

    num2 = "abc"

    try:

    num3 = num1 / num2

    except:

    print("除数不可以为 0 ")

    1.3 try ... except ... else 语句

    在 try ... except 语句后面可以增加一个 else 语句,该语句表示的含义可以按照如下描述进行理解,当出现异常的时候执行 except 语句中的代码,当无异常执行 else 语句代码。

    num1 = 20

    num2 = 1

    try:

    num3 = num1 / num2

    except ZeroDivisionError:

    print("除数不可以为 0 ")

    except TypeError:

    print("除数类型不对")

    else:

    print("无异常,会被执行")

    以上代码无错误,那 else 语句就会被执行到。

    2 异常类型

    2.1 常见的异常类型

    在编写代码的过程中,你需要掌握一些常见的异常类型,熟记它们可以帮助你快速进行错误排查。AttributeError 某个对象没有属性

    Exception 通用型异常对象

    FileNotFoundError 找不到文件

    IOError 输入输出异常

    IndexError 索引异常

    KeyError 键异常

    NameError 对象名称异常

    SyntaxError 语法错误

    TypeError 类型错误

    ValueError 值错误

    以上错误都属于常见错误,其中重点以 Exception 通用异常对象与 SyntaxError 语法错误为主,它们两个是最常出现的。

    很多时候其实直接使用通用异常对象 Exception 就可以了,不需要记住所有的异常类型的。

    2.2 捕捉多个异常

    在上文已经接触过捕捉多个异常的语法格式了,可以在学习一下。

    try:

    可能出错的代码块

    except 异常对象1:

    异常处理代码块

    except 异常对象2:

    异常处理代码块

    2.3 一个 except 捕获多个异常

    Python 也支持使用一个 except 捕获多个异常,具体语法格式如下:

    try:

    可能出错的代码块

    except (异常对象1,异常对象2...):

    异常处理代码块

    在这里还是要推荐下我自己建的Python学习交流裙:【745】【895】【701】,群里都是学Python的,如果你正在学习Python ,小编欢迎你加入,大家都是Python学习党,不定期分享干货,包括我自己整理的一份Python进阶资料,欢迎小伙伴们进群互相讨论正在跳转​jq.qq.com

    2.4 直接抛出异常

    捕获到异常之后,可以直接抛出 Python 给内置好的异常信息,例如:

    num1 = 20

    num2 = 0

    try:

    num3 = num1 / num2

    except ZeroDivisionError as e:

    print(e)

    except TypeError as e:

    print(e)

    else:

    print("无异常,会被执行")

    注意 except 后面异常对象使用 as 关键字起了一个别名叫做 e,然后直接输出 e 就是 Python 内置好的错误信息了。这里的 e 可以为任意名称,遵循变量命名规则即可。

    3 finally 语句

    try ... except 语句还可以和 finally 语句配合,形成下述语法格式:

    try:

    可能出错的代码块

    except:

    代码出错执行的代码块

    else:

    代码正常执行的代码块

    finally:

    无论代码是否有异常出现都会执行的的代码块

    finally 语法需要与 try 语句配合使用,无论是否有异常出现都会执行该语句内容,具体代码大家可以自行测试即可。

    4 日志模块 logging

    4.1 logging 模块

    在 Python 中为了更好的记录程序错误信息,提供了一个 logging 模块供我们使用,该模块提供了 5 个等级用于标记日志信息的等级。DEBUG 等级,使用 logging.debug() 显示

    INFO 等级,记录类的日志

    WARNING 等级,警告级别,存在潜在风险

    ERROR 等级,引发错误

    CRITICAL 等级,引发系统出现问题,最高等级

    导入 logging 模块之后,可以使用下述内容设置显示信息的等级。

    import logging

    logging.basicConfig(level=logging.DEBUG)

    五个等级输出函数如下:

    import logging

    logging.basicConfig(level=logging.DEBUG)

    logging.debug("DEBUG")

    logging.info("INFO")

    logging.warning("WARNING")

    logging.error("ERROR")

    logging.critical("CRITICAL")

    输出内容如下:

    DEBUG:root:DEBUG

    INFO:root:INFO

    WARNING:root:WARNING

    ERROR:root:ERROR

    CRITICAL:root:CRITICAL

    上述代码因为设置的等级是 DEBUG,所以所有的日志信息都会输出,如果设置为 WARNING,例如下述代码,查看输出内容。

    import logging

    # 注意看这里的设置

    logging.basicConfig(level=logging.WARNING)

    logging.debug("DEBUG")

    logging.info("INFO")

    logging.warning("WARNING")

    logging.error("ERROR")

    logging.critical("CRITICAL")

    因为设置了 logging 输出等级是 WARNING,所以较低等级的 DEBUG 与 INFO 将不再输出,这样可以随着程序开发不断的提高等级,最终提高到 CRITICAL。

    4.2 格式化 logging 日志信息

    可以在全局进行 logging 信息的格式化,语法格式如下:

    logging.basicConfig(level=logging.WARNING,format = "")

    在不设置 format 的时候,默认输出的日志信息如下,所以输出内容前面都存在一个 DEBUG:root: 内容,如果设置 format="" 即可删除原内容。

    DEBUG:root:DEBUG

    INFO:root:INFO

    WARNING:root:WARNING

    ERROR:root:ERROR

    CRITICAL:root:CRITICAL

    设置 format = "" ,代码如下:

    import logging

    logging.basicConfig(level=logging.WARNING,format= "")

    其余内容不需要修改,输出的日志信息,已经没有前面的默认关键词了。

    WARNING

    ERROR

    CRITICAL

    对于日志信息的格式化,还可以增加 asctime ,该内容为时间信息,例如下述代码:

    import logging

    logging.basicConfig(level=logging.WARNING,format= "%(asctime)s")

    logging.debug("DEBUG")

    logging.info("INFO")

    logging.warning("WARNING")

    logging.error("ERROR")

    logging.critical("CRITICAL")

    使用该内容运行结果发现,要输出的信息没有了,这是因为你在 format 参数中只传了 asctime 一个内容,如果还需要 logging 输出信息,需要增加 message,语法如下:

    import logging

    logging.basicConfig(level=logging.WARNING,format= "%(asctime)s %(message)s")

    logging.warning("WARNING")

    logging.error("ERROR")

    logging.critical("CRITICAL")

    学习过 asctime 与 message 之后,你应该对 format 格式化的语法有了一些基本的认知,它应该是一个 %(参数名)s 这样的结构,如果增加一个 logging 等级参数 levelname,尝试一下你可以将其拼接到 format 中吗?

    4.3 程序日志 logging 输出到文件中

    程序日志如果都输出在 Python 控制台,导致的结果就是控制台出现大量的调试信息,很多时候可以将日志信息输出到文件中,而且实现非常简单,只需要增加一个参数 filename 即可解决问题。

    import logging

    logging.basicConfig(filename = "out.txt",level=logging.WARNING,format= "%(asctime)s %(message)s")

    执行上述代码之后,会自动在当前根目录(文件与目录可以自己设置)生成一个日志文件。

    4.4 停用程序日志

    使用下述方法停用日志。

    logging.disable(level)

    如果希望全部停用,只需要直接限制等级到 CRITICAL 即可。

    import logging

    logging.basicConfig(level=logging.WARNING,format= "%(asctime)s %(message)s")

    logging.disable(level=logging.CRITICAL)

    logging.debug("DEBUG")

    logging.info("INFO")

    logging.warning("WARNING")

    logging.error("ERROR")

    logging.critical("CRITICAL")

    5 总结

    本篇博客主要写的是异常相关知识,在 Python 代码的编写过程中经常会出现异常,一般情况下程序员都叫做 出 BUG 了,这个 BUG 就是臭虫的意思,表示程序出臭虫了。当然很多时候我们也戏称“无 BUG,不编程”。

    发现 BUG,解决 BUG,程序员不是在写 BUG 的路上,就是在改 BUG 的路上,好友哲理。

    关于异常部分,还有如下内容可以扩展。使用 raise 抛出异常

    使用 traceback 模块记录异常信息到文件中

    程序断言 assert

    展开全文
  • git代码写错分支了怎么办

    千次阅读 2018-09-28 15:54:00
    git代码写错分支了怎么办 git 还是很容易解决的。几行命令即可 <!--more--> 还没有提交代码 #第一步,将修改的代码暂存到stash git stash #第二步,切换到正确的分支 git checkout targetbranch #第三步...

    git代码写错分支了怎么办

    git 还是很容易解决的。几行命令即可

    <!--more-->

    还没有提交代码

    #第一步,将修改的代码暂存到stash
    git stash
    
    #第二步,切换到正确的分支
    git checkout targetbranch 
    
    #第三步,从stash中取出暂存的代码修改。
    git stash pop
    

    3行命令就可以切换到正确的分支,并把已经写好但未提交的代码放到正确的分支下了。
    继续提交的话就是

    git add .
    git commit -m xxx
    

    参考来源:https://www.cnblogs.com/crayfish/p/5719475.html

    已经提交了

    撤回即可

    git reset HEAD^
    

    然后继续执行 没提交时的操作

    已经push了

    同已经提交了的步骤。 先撤回,然后再push下撤回后的。不过会有记录

    参考 https://gorden5566.com/post/1010.html

    转载于:https://my.oschina.net/northerSong/blog/2218772

    展开全文
  • 未提交的情况下 git add . (把所有改动暂存) git stash (把暂存的文件提交到git的暂存栈) git checkout 本该提交代码的...git checkout 不该提交代码提交了代码的分支 git reset HEAD~1 (最近一次提交放回暂存区,...

    未提交的情况下

    git add . (把所有改动暂存)

    git stash (把暂存的文件提交到git的暂存栈)

    git checkout 本该提交代码的分支

    git stash pop (将暂存栈中的代码放出来)

    至于是继续改还是提交就随你了

    已提交的情况下

    git checkout 不该提交代码提交了代码的分支

    git reset HEAD~1 (最近一次提交放回暂存区, 并取消此次提交)

    git stash (把暂存的文件提交到git的暂存栈)

    git checkout 该提交代码的分支

    git stash pop

    下面一顿操作随你猛了,等你把代码提交到了正确的分支后,再次切到刚刚错的分支

    git push origin 错误的分支 -f (把不该上去的文件回退掉)

    展开全文
  • 一切以版本控制为中心,版本即每一次commit,其实分支是指向commit的,HEAD也是指向某一次提交的,HEAD其实指向的就是当前分支的最近一次commit,可以看到master分支相对当前分支就落后一个版本。通过上面的理解...
  • 一切以版本控制为中心,版本即每一次commit,其实分支是指向commit的,HEAD也是指向某一次提交的,HEAD其实指向的就是当前分支的最近一次commit,可以看到master分支相对当前分支就落后一个版本。通过上面的理解...
  • 错误分两种,一种是程序的逻辑不对,导致代码执行异常。例如:var s = null;var len = s.length; // TypeError:null变量没有length属性对于这种错误,要修复程序。一种是执行过程中,程序可能遇到无法预测的异常...
  • 但是你发现你commit 的时候写错分支,例如将 #12 写成 #22,这个时候该怎么办?不要慌,一行命令搞定,这个时候代码还在本地仓库,可以用下面的命令把代码撤回来: git reset HEAD^ 执行上面的代码后,可以用: ...
  • git代码写错分支

    2019-12-13 10:27:06
    写着代码,写很多,突然发现写错分支怎么办?别着急,往下看。。。。。。 这个文章是基于你未提交代码的情况下来执行的操作,如果你已经commit,那就百度其他方法吧。 好,废话少说,直接上命令吧。 1....
  • Git提交代码错了吃后悔药的几种常用办法

    千次阅读 多人点赞 2020-11-02 07:30:00
    1. 前言 写代码都会犯错误,不小心提交了一个错误我该怎么办?提交的描述信息我该怎么办?如果你也遇到这个问题,那么今天胖哥分享的这篇文章将非常适合你。2. Commit 错了怎么办 放心...
  • 2. Commit 错了怎么办 放心都是有后悔药吃的,我们来看看。场景一假如你git commit了一堆代码,但是你发现本次Commit的描述信息有点随意,你可以这样:gitcommit--amend-m“新的提交消息”场景二你本来打...
  • 一、代码量太少了,看得多做得少,导致一做就错...1、找不到文件,原因可能是你在cmd里面用javac编译的时候 把文件名都写错了。 这种情况你用dir命令查看一下当前路径下的文件从名字上就可以看出究竟有没有你的文件。 2
  • 代码的时候,测一下样例,很多时候样例过,但交到OJ上却挂,始终找不到错误原因。有时候连样例都过不。因此,我总结三种方法教给大家,让大家有方向地去查,而不是看着程序发呆。希望大家可以把三种...
  • git提交分支怎么办

    千次阅读 2019-05-01 16:03:09
    很多时候,当我们代码,绞尽脑汁上comment,终于完成提交。一回首却突然发现,当前分支怎么不是我的分支? 这时候比较挫一点的方式就是,切换到自己的分支,然后重新编写已经错误提交到别的分支的内容,并...
  • 点击上方蓝色小字,关注“涛哥聊Python”重磅干货,第一时间送达来源:码农小胖哥1. 前言写代码都会犯错误,不小心提交一个错误我该怎么办?提交的描述信息我该怎么办?如果你也遇到这个问...
  • 某一天,当你代码,绞尽脑汁填上comment,小手一点,完成提交。一回首却突然发现,当前提交的分支居然不对? 这时候比较挫一点的方式就是,切换到自己的分支,然后重新编写已经错误提交到别的分支的内容,并...
  • 在开发中,有时,我们花几个小时的 JS 代码,在游览器调试一看,控制台一堆红,瞬间一万头草泥马奔腾而来。至此,本文主要记录 JS 常见的一些报错类型,以及常见的报错信息,分析其报错原因,并给予处理方法。...
  • 很多时候因为一个符号,一个字母写错了,导致程序不能正常运行,调试半天很难发现,最后导致学习兴趣大大减少,很难坚持下去,恰巧这个网站提供了代码比较.可以复制你写的代码和站长的比较,系统一下子就给你提示哪里错了,...
  • 这或许是很多Java初学者会遇到的问题。就是看视频或者听课的时候,能看懂,但是就是不会写。...很多时候因为一个符号,一个字母写错了,导致程序不能正常运行,调试半天很难发现,最后导致学习兴趣大大减少...
  • 我们就以最大子数组和为例: 最大子段和问题:给一组数,计算最大子段和。 在博客:最大字段和的6种解法,解法三中,我们提到...后续计算子段和的时候,下标也是绕来绕去,一不小心就写错。。 那么怎么办呢,这...
  • 然后最后把链表里第一个元素(也即是第一个文件)里的内容放到一个lines数组里(这个比对思想是按行比较),但是问题就来了,那么被比对的另外一个文件该怎么办呢,这个lines数组每循环一次就会被更新一次,这个该...
  • 之前我也卡在这个地方,检查无数遍代码,Filter在web.xml里的配置也没有,也查很多人的解决方案,的Filter代码也没,不可能出现一句话重复打印两次的情况(我在Filter里有输出打印一句话,该句话打印两...
  • 1. 前言写代码都会犯错误,不小心提交了一... Commit 错了怎么办放心都是有后悔药吃的,我们来看看。场景一假如你git commit了一堆代码,但是你发现本次Commit的描述信息有点随意,你可以这样:gitcommit--amend-m“...
  • 1. 前言写代码都会犯错误,不小心提交了一... Commit 错了怎么办放心都是有后悔药吃的,我们来看看。场景一假如你git commit了一堆代码,但是你发现本次Commit的描述信息有点随意,你可以这样:gitcommit--amend-m“...
  • 当你初学C++的时候,满怀期待地照着书,你可能在这样一行代码: 很不幸的是,结果是这样的: 你看书上的代码再三确定自己是跟着书本一步一步来的,没理由出问题, 当你实在没办法的时候,嘿!看这里: 一、 ...
  • 请大家帮我看看是我写错了么,还是说单个tomcat的瓶颈就是如此? 前端代码 ``` ; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE ...
  • 很多小伙伴就会说了 ,这不就是没找到依赖么 ,一开始我就觉得我代码写错了 ,但是 我把整个代码流程全部查了一遍 ,改写的我都写了 注解我也都加了 不管是Dao 还是Service 我都加了注解 ,运行的时候还是会出错 ...
  • 我的android程序需要调用我自己的C++代码,编译成so文件后调用,可是现在出错了,java部分的代码调试过没问题,可c++的代码不知道怎么调试,到底哪句代码错了也找不出来,这可怎么办? 有没有什么办法可以在c++...
  • 同一个工程警告等级为3的时候,编译正常,但是等级是4的时候,就会报错了: 这个很简单,我们自己的代码,哪里有警告改哪里。但是如果,我们使用的第三方库有警告怎么办呢?我们又拿不到源码,即使拿到了源码也不...
  • 遇到这种情况一定是代码有些写错了,比如用到系统函数却写错了字母,需要从头到尾检查。用到php时,使用echo“1”;查询 转载于:https://my.oschina.net/jackal...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 133
精华内容 53
关键字:

代码写错了怎么办