【问题标题】:Exception handling of a function in PythonPython中函数的异常处理
【发布时间】:2009-01-13 09:11:11
【问题描述】:

假设我有一个函数定义:

def test():
    print 'hi'

每当我给出一个论点时,我都会得到一个 TypeError。

现在,我想把 def 语句放在 try 中。我该怎么做?

【问题讨论】:

  • 你真的应该阅读 python.org 上的初学者文档!
  • 您能否编辑您的问题并显示您收到的确切代码和错误消息。很难看出您的问题是什么以及如何解决它。
  • -1:没有失败的代码,也没有错误回溯,我投票赞成以“不是一个真正的问题”结束这个问题。

标签: python exception-handling


【解决方案1】:
try: 
    test()
except TypeError:
    print "error"

【讨论】:

    【解决方案2】:
    In [1]: def test():
         ...:     print 'hi'
         ...:
    
    In [2]: try:
         ...:     test(1)
         ...: except:
         ...:     print 'exception'
         ...:
    exception
    

    这是tutorial中的相关部分

    顺便说一句。要修复此错误,您不应将函数调用包装在 try-except 中。而是使用正确数量的参数调用它!

    【讨论】:

    • 您能否编辑您的问题并显示您收到的确切代码和错误消息。很难看出您的问题是什么以及如何解决它。
    【解决方案3】:

    你说

    现在,我想把 def 语句 在尝试。如何做到这一点。

    def 语句是正确的,它没有引发任何异常。所以把它放在try 不会做任何事情。

    引发异常的是对函数的实际调用。所以应该把它放在try 中:

    try: 
        test()
    except TypeError:
        print "error"
    

    【讨论】:

      【解决方案4】:

      如果你想在调用时抛出错误,听起来你可能想要,你可以试试这个方法:

      def test(*args):
          if args:
              raise
          print 'hi'
      

      这会将错误从调用位置转移到函数。它通过*args 列表接受任意数量的参数。并不是说我知道你为什么要这样做。

      【讨论】:

        【解决方案5】:

        在 Python 中处理可变数量参数的更好方法如下:

        def foo(*args, **kwargs):
            # args will hold the positional arguments
            print args
        
            # kwargs will hold the named arguments
            print kwargs
        
        
        # Now, all of these work
        foo(1)
        foo(1,2)
        foo(1,2,third=3)
        

        【讨论】:

          【解决方案6】:

          这是有效的:

          try:
            def test():
              print 'hi'
          except:
            print 'error'
          
          
          test()
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-04-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-09-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多