• 不瘦到140不改名
    2019-05-27
    老师,看到异常这一讲,忽然想起了一个问题,一直困扰着我
    e = 1
    try:
        1 / 0
    except ZeroDivisionError as e:
        pass

    print(e) # NameError: name 'e' is not defined
    这里为什么会显示e没有被定义呢?
    展开

    作者回复: 你可以阅读官方文档:https://docs.python.org/3/reference/compound_stmts.html#the-try-statement

    "When an exception has been assigned using as target, it is cleared at the end of the except clause."

    比如下面这个code block:
    except E as N:
        foo

    就等于
    except E as N:
        try:
            foo
        finally:
            del N

    因此你例子中的e最后被delete了,所以会抛出NameError

     4
     61
  • Hoo-Ah
    2019-05-27
    第一种写法更加简洁,易于阅读。而且except后面的错误类型先抛出数据库连接错误,之后才抛出查询错误,实现的异常处理和第二种一样。

    作者回复: 正解

    
     43
  • Geek_b6f316
    2019-05-27
    第一种方法简单明了,是不是少了一个as
    
     15
  • Fergus
    2019-05-28
    选择1,原因有2:
    1. 从开始学就如①这么写的;
    2. ②读起来太难受,太不pythonic;

    读了留言后意识到:
    3. ①与②的运行逻辑一致,①可以看作②的简化版;
    4. ②的写法,如出现异常,多次调用异常处理,降低程序运行效率;

    多谢小伙伴们👍
    展开
    
     9
  • liput
    2019-05-27
    想请问老师,在facebook里面开发,对于异常处理有什么规范需要遵循吗?自定义异常、抛异常、捕获异常,粒度一般怎么把控呢?
    与此相应的,我对日志输出也有同样的疑问,希望老师能结合您在大公司里的实战经验多讲讲。

    作者回复: 我会在最后一章里对大公司开发的规范,流程做一个详细的介绍。通常来说,异常能用内置的exception就用,如果需要自定义就自定义,看实际的需求。一般来说异常抛出,我们都会对其进行Log(一般每1000次log一次),输出到real time的table和dashboard里,这样有利于之后的分析和改进。

     1
     7
  • 太平湖-燃气(DUYANG...
    2019-05-31
    什么是flow-control。。
     2
     4
  • John Si
    2019-05-27
    1. 第一種寫法比第二種寫法簡潔
    2. 因我對try語法執行流程不太清楚,還是老師跟熟悉該同學多講解一下。但我自己想法是第二種寫法跟巢狀迴圈寫法很像,假設是第二句語法發生錯誤,第二種寫法會多執行一次try 語句,從而增加了程序運行時間。

    綜上所述,我認為第一種寫法較第二種好

    作者回复: 正解

    
     3
  • third
    2019-05-27
    小白提问
    针对06思考的第一问,分次读取文件
    读取完成一个很大的文件之后,这些文件存放在哪里?
    如果这个文件大到了无法一次读取内存,那么他是否应该存储在磁盘中?在需要用的时候,又从磁盘中调取呢?
    希望老师解释一下
    
     2
  • Python高效编程
    2019-05-27
    第一种方式清晰一点
    
     2
  • 秦晋
    2019-07-11
    思考题: 第一种比较好,第二种多层嵌套

    还有,文章中举的例子,字典我一般获取使用 d.get("bob", None)这种方式,不会报异常,没有直接返回None
    
     1
  • helloworld
    2019-05-29
    老师,对文中的自定义异常不太理解,为什么要主动去raise自定义异常,有啥意义吗
     2
     1
  • 无才不肖生
    2019-05-28
    老师,想问个题外题
    对象的属性是个字典,django中要根据属性里字典的某个键值查询该怎么做呢,如下面的,我想直接根据companyType来查询过滤记录
    person
    {
        IDCard:12345678901,
        name:emily
        companys:
            companyName:'阿里',
            companyType:'电商'
    }
    展开
    
     1
  • Geek_41743c
    2019-05-28
    dict取值是不是用get()比较好。
    
     1
  • SCAR
    2019-05-27
    应该是第一种情况更优:
    1. 从实现的功能来看第一种和第二种都能达到,不过程序里两种异常是线性依次的,所以完全可以并行写在一个except里,再者python里的标准异常都__str__处理过,是完全可以区分哪个异常发生的。
    2. 但就像the zen of python里强调的那样,简单和清晰是 python代码应该遵从的,显然第一种更优。
    
     1
  • alan
    2019-05-27
    老师好,相比try-catch的错误处理模式,您觉得Golang那样的返回error的错误处理方式怎么样?您更喜欢哪种错误处理方式?
    
     1
  • 小豹子
    2019-05-27
    老师,系统异常,非系统异常能举个例子说明下吗?

    作者回复: 系统异常比如说keyboardInterrupt

    
     1
  • leixin
    2019-05-27
    期待更进阶的。
    
     1
  • 王校
    2019-05-27
    第一种对阅读程序的人更友好。
    
     1
  • 「」
    2020-02-02
    第一种和第二种效果类似,
    都是先检查数据库连接异常,再检查query执行的异常。

    更喜欢这种写法:
    try:
        db = DB.connect('<db path>') # 可能会抛出异常
        raw_data = DB.queryData('<viewer_id>') # 可能会抛出异常
    except DBConnectionError as err:
        print('ConnectionError: {}'.format(err))
    except DBQueryDataError as err:
        print('QueryDataError: {}'.format(err))
    展开

    作者回复: 回答的很对

    
    
  • 一粒
    2020-01-02
    老师,什么样的代码才是您说的“flow-control”

    作者回复: 比如条件语句 if,循环语句for,while等等

    
    
我们在线,来聊聊吧