标签: try-except

我可以在 except 子句中抛出自定义异常而不导致:“在处理...期间”

首先,如果您认为这不是最佳实践,我很乐意在评论中讨论这一点。

我的问题如下,我尝试根据用户输入查找文件。如果找不到该文件,我会得到一个FileNotFoundError. 这很好,但我想给出一个适当的例外,可以更好地描述问题。用户并不真正知道存在的文件决定某些事情是否可能。所以 aFileNotFoundError可能看起来不合适。所以我目前拥有的是:

try:
    x = get_file(...)
except FileNotFoundError as e:  # Unsupported version
    raise MyOwnException(f"Explaining the problem")
Run Code Online (Sandbox Code Playgroud)

上面的方法有效,但异常看起来像这样:

  • FileNotFoundError& 堆栈跟踪
  • “在处理上述异常期间,发生了另一个异常:”
  • MyOwnException& 堆栈跟踪

我愿意只拥有MyOwnException. 为了实现这一目标,我知道你可以这样做:

try:
    x = get_file(...)
except FileNotFoundError as e:  # Unsupported version
    file_not_found = True
if file_not_found:
    raise MyOwnException(f"Explaining the problem")
Run Code Online (Sandbox Code Playgroud)

我还可以使用 . 检查文件是否存在os.path.isfile(file_path)。但我希望有一个更优雅的解决方案,因为通常不鼓励在打开之前检查文件是否存在。

python exception python-3.x try-except

3
推荐指数
1
解决办法
233
查看次数

Python中如何重复输入直到满足特殊条件?

我需要从用户那里获取整数输入并将它们添加到一个集合中。整数的数量未知。当用户输入“完成”时,输入过程将结束。

这是我的代码:

s = set()
print('Please type the number, when you are done please type "Done":')
while True:
    try:
        a = int(input())
        s.add(a)
    except:
        if a == "Done":
            break
        else:
            print('Integer only, please re-type:')
            continue
print(s)
Run Code Online (Sandbox Code Playgroud)

但它并没有按预期工作。

我的想法很简单。如果用户输入一个整数,那么没关系,只需添加到 set 即可s。如果他们输入一个字符串(这int(input()是错误的),那么它将进入except,如果该字符串是“完成”,则中断循环while True,如果不是,则要求用户重新输入并继续循环。

如果我先输入字符串并且正常输入,则会出现以下错误:

2种错误

我尝试在开始时使用一个简单的 if-else 语句,但它会在 处导致回溯int(input())

python user-input try-except

3
推荐指数
1
解决办法
4192
查看次数

什么时候应该使用"try"块,我应该使用哪种块?

关于Delphi中异常处理的两个非常基本的问题.

1)什么时候Try?我的猜测是我不需要一个Try条款

  • 明确的代码,如赋值,条件和循环
  • 访问我的VCL组件

但我确实需要 Try

  • 数据库访问
  • 任何第三方组件,因为我不知道他们是否可能引发异常
  • 帮助系统显示的任何内容都可以引发异常

我错过了什么吗?

2)尝试......最后还是尝试......除了......或两者兼而有之?多年来我一直认为这是一个或者两个选择,直到@RRUZ 用一些代码 回答了我的一个问题

 try
    CoInitialize(nil);
    try
      SetStaticIpAddress('Network card name','192.168.1.1','255.255.255.0');
    finally
      CoUninitialize;
    end;
 except
    on E:EOleException do
        Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode]));
    on E:Exception do
        Writeln(E.Classname, ':', E.Message);
 end;
Run Code Online (Sandbox Code Playgroud)

问题:是否只是去捕捉异常CoInitialize(nil);或来自SetStaticIpAddress('Network card name','192.168.1.1','255.255.255.0');

换句话说,是否有可能通过尝试最终尝试除了?


[更新]#2的答案似乎是肯定的.此代码显示两个对话框...

procedure TForm3.FormCreate(Sender: TObject);
  var x, zero : Integer;
begin
   zero := 0;
   try
      try
        x := 42 div zero;
      finally
         MessageDlg('Divide by zero finally', mtInformation, [mbOK], 0);
      end;

   Except …
Run Code Online (Sandbox Code Playgroud)

delphi exception-handling try-finally try-except

2
推荐指数
1
解决办法
258
查看次数

引发错误与返回False python3

嗨我最近开始在python中编码,我想知道如何处理错误.我做了教程diveintopython并在那里他使用加注错误来提供错误的反馈.在这里我的情况:我有一个函数,它检查一个字符串,代表一个数字,是7或8位长和其他一些东西

def checkNumber( someNumber ):
  ''' checks if Number is valid '''
  someNumber = str(someNumber);
  if not 6 < len(someNumber) < 9:
     raise ValueError('number must be either 7 or 8')
  if not re.search('^[0-9]{7,8}$', someNumber):
     raise ValueError('only digits from 0...9')
  sum = 0
  if len(pzn) == 7: someNumber = '0' + someNumber
  for n, a in list(enumerate(someNumber[:-1], start=1)):
     sum += int(a)*n
  if someNumber[-1]==str(sum%11):
     return someNumber
  else:   
     raise ValueError('not a vaild code')
Run Code Online (Sandbox Code Playgroud)

我独立使用此功能,但我也会从另一个函数调用它,它扫描条形码并调用此函数来验证代码.因此,如果扫描号码是正确的,它应该继续,如果不是,它应该继续扫描.像我这样做更好,并在扫描仪功能中放置一个try/except块,或者我应该返回一个False

非常感谢

python return raise try-except

2
推荐指数
1
解决办法
5238
查看次数

python缩短嵌入式try-except块

当我尝试打开一个可能有也可能没有'http://'标题的网址时,我一直try-except在另一个网页中使用try-except.

但代码看起来很混乱.我想知道python是否有更好的方法来处理这些需求.实际上我已经阅读了'with'关键字..我觉得,这会让代码更难以阅读......

我有链接打开,但链接可能有一些缺失.例如,网址就像.xxx.com或http://xxx.COM.我必须测试http://和url,http:// plus www.加上网址,网址找到合适的网址.

如果没有,我必须记录原因,然后继续下一个链接:

    for link in links:
        url = link
        if not url.startswith('http'):
            try:
                url1 = r'http://'+link
                res = requests.get(url)
            except Exception as e:
                try:
                    url2 = r'http://www.'+link
                    res = requests.get(url)
                except Exception as err:
                    self.print_error(*[url1, modify(e.message)])
                    self.print_error(*[url2, modify(err.message)])
                    self.error_log(*[url1, modify(e.message)])
                    self.error_log(*[url2, modify(err.message)])

        else:
            try:
                res = request.get(url)
            except Exception as e:
                self.print_error(*[url, modify(e.message)])
                self.error_log(*[url, modify(e.message)])
Run Code Online (Sandbox Code Playgroud)

python try-except python-requests

2
推荐指数
1
解决办法
118
查看次数

Python:try/except调用返回错误的值,调用except子句不需要

在附加的代码片段中,目标是接收用户输入,并且根据它是否为整数,返回整数或递归调用函数,直到给出有效整数.

def verify_input(msg, str_exp=True, req_str=None):
    user_input = input(msg)
    if str_exp:
        pass # TODO: implement later
    else:
        try:
            return int(user_input)
        except ValueError:
            verify_input("Enter a whole number please. ", str_exp=False)
Run Code Online (Sandbox Code Playgroud)

如果用户在第一个函数调用上正确响应(即整数),则确实从函数返回整数.

问题是,如果用户行为不端并且首先没有响应整数,只在后续尝试中给出整数,我可以看到,使用调试器,该try子句总是转到except子句...即使第二次调用是整数.

综上所述:
verify_input(12)#=>返回12
verify_input("Hello")#=>返回调用verify_input ---> user给出答案"12"=>返回None.

提前致谢.

python recursion try-except

2
推荐指数
1
解决办法
634
查看次数

如何提示程序员在python中使用try except子句?

假设我有一个引发异常的方法:

def methodA(x, y):
     if y != 0: 
         z = x / y
         return z
     else:
         raise ZeroDivisionError("zero can not be a denominator")
Run Code Online (Sandbox Code Playgroud)

在方法B中,我调用了methodA而没有处理异常:

def methodB(x, y):
     print methodA(x, y)
Run Code Online (Sandbox Code Playgroud)

在这里,我想要一些可以警告我ZeroDivisionError在methodB中存在潜在风险的东西,并且最好抓住它.有没有办法在方法A中添加某些代码,或者我们可以使用一些工具来找到我忽略了一些重要的异常吗?

python static-analysis exception-handling pylint try-except

2
推荐指数
1
解决办法
114
查看次数

处理Python 3.6中的异常

我试图在Python 3.6中处理异常.我想处理每个可能的异常并打印异常.当我做

try:
    raise RuntimeError("Test")

except:
    e = sys.exc_info()[0]
    print(e)
Run Code Online (Sandbox Code Playgroud)

它只是打印

class'_mysql_exceptions.OperationalError'

我如何得到异常的消息?在这种情况下,我希望输出为"测试".

python exception try-except python-3.6

2
推荐指数
1
解决办法
1万
查看次数

带有"常规"异常消息的条件`try`语句

try如果条件为真,我想加载文件.如果发生文件异常或条件为假,我想要执行第二行(一行)代码.

为了涉及鸟类,请考虑以下代码:

if try_to_fly:
    try:
        fly()
    except FlyError:
        walk("I'm walking instead of flying.")
else:
    walk("I'm walking stead of flying.")

# more lines below #
Run Code Online (Sandbox Code Playgroud)

这就是我想要做的.但是,它有walk("I'm walking stead of flying.")两次,这是很好的避免.

此外,还有更多的代码要做到这一点,因此我们不能return在没有考虑该代码的情况下使用try语句.

是否有更多的pythonic方式来做到这一点?

python if-statement try-except python-3.6

2
推荐指数
1
解决办法
130
查看次数

如何将列表转换为字典,其中某些键缺少其值?

我有一个对象列表,其数量在分号后关联。试图将此列表转换为字典,但某些键一旦转换将丢失其值。尝试使用try / except,但不确定如何将值分别存储到字典中。

例:

t = ['Contact:10', 'Account:20','Campaign:', 'Country:', 'City:']
Run Code Online (Sandbox Code Playgroud)

转换时,Campaign和Country对象将没有值。我想通过或指定a NaN作为字典值。

我尝试了类似的方法,但无济于事。

for objects in t:
    try:
        dictionary = dict(objects.split(":") for objects in t)
    except:
        pass
Run Code Online (Sandbox Code Playgroud)

任何建议表示赞赏。

python dictionary try-except

2
推荐指数
2
解决办法
69
查看次数